因为jQuery是一个广泛使用和成熟的协作工作,我不禁要在编写更好的Javascript时查看其源代码以获得指导.我一直使用jQuery库和我的PHP应用程序,但是当我看到这个相当复杂的库的内幕时,我意识到我仍然不了解Javascript.罗,我对SO社区有几个问题.首先,请考虑以下代码......
$('#element').attr('alt', 'Ivan is SUPER hungry! lolz');
Run Code Online (Sandbox Code Playgroud)
VS
$('#element').attr({'alt': 'Ivan is an ugly monster! omfgz'});
Run Code Online (Sandbox Code Playgroud)
现在,这是说该attr()方法被设计为接受EITHER属性名称,属性名称和值,还是配对值映射?有人可以给我一个关于地图实际是什么的简短解释以及它与Javascript中的数组的重要方式吗?
继续前进,整个图书馆都包含在这个业务中......
(function(window, undefined) { /* jQuery */ })(window);
Run Code Online (Sandbox Code Playgroud)
我知道包装的括号会导致类似的行为body onLoad="function();",但这种做法被称为什么,它与使用onLoad事件处理程序有什么不同?此外,我最后无法在(window)那里做出头或尾.这个window对象究竟发生了什么?
在评估中我是错误的,对象与Javascript中的函数没有什么不同吗?如果我错了,请纠正我$(),但它是包含所有jQuery对象,但它看起来就像一个方法.这是代码示例的另一个快速问题...
$('#element').attr('alt', 'Adopt a Phantom Cougar from Your Local ASPCA');
Run Code Online (Sandbox Code Playgroud)
......内部应该看起来像这样(也许我错了)......
function $(var element = null) {
if (element != null) {
function attr(var attribute = null, var value = null) {
/* stuff that does things */
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是在Javascript中定义对象及其子方法和属性的常规过程吗?将Javascript与PHP进行比较, …
我最近与一位工作同事讨论了我们的编码实践中的一些差异,在那里我提出了一个关于他在事件处理程序中过度使用上述两种方法的问题.具体来说,他们都看起来像这样......
$('span.whatever').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
/* do things */
});
Run Code Online (Sandbox Code Playgroud)
他声称这是一个没有可预见的反弹的良好做法,并将改善跨平台支持,同时减少意外问题.
我向你们提问:如果他是对的,为什么jQuery团队没有实现全局应用于所有事件处理程序的这种行为?实际上,我的假设是他错了,因为这些方法可以独立使用,但是谁知道......你的见解非常受欢迎.
-
更新:我做了一个简单的速度测试,这两个函数引起了一点拖拽,但没有什么特别值得注意的.除此之外,我认为有充分理由谨慎使用它们.
$('span.whatever').on('click', function(e) {
var start = new Date();
for (i = 0; i < 999999; i++) {
e.preventDefault();
e.stopPropagation();
}
console.log( new Date() - start );
});
Run Code Online (Sandbox Code Playgroud)
以上记录约为9.5秒,当我从循环中取出函数调用时约为2.5秒.
我试图做的事情可以通过以下方式完成......
elementContent = document.getElementById('docElement').innerHTML;
elementContent = parseFloat(elementContent);
Run Code Online (Sandbox Code Playgroud)
甚至......
elementContent = parseFloat( document.getElementById('docElement').innerHTML );
Run Code Online (Sandbox Code Playgroud)
但我不禁想知道是否有一种更优雅的方式来检索和分配DOM内容作为我可能不知道的浮动.任何见解?
我确定解决方案是正确地盯着我,但我看不到它.我正在尝试从外部文件源加载对象.我已经尝试了几种方法,使用jQuery的内置方法,但继续返回undefined.我的问题是范围吗?partnerData由于脚本中的其他依赖方法,我需要它在正确的位置.我不想在$.get回调中操作我网站的其余功能.非常感谢任何帮助,这里是代码:
$(function() {
var partnerData;
$.get('data/partners.json', function(file) {
partnerData = $.parseJSON(file);
});
console.log(partnerData); /* returns undefined instead of object */
});
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢所有人的反馈.这是我采用的解决方案:
var partnerData;
$.ajax({
url: 'data/partners.json',
dataType: 'json',
async: false,
success: function(data) {
partnerData = data;
}
});
Run Code Online (Sandbox Code Playgroud)