我开始一个项目与jQuery。
在你的jQuery项目中有哪些陷阱/错误/误解/滥用/误用?
我开始一个项目与jQuery。
在你的jQuery项目中有哪些陷阱/错误/误解/滥用/误用?
当前回答
我的意见)
通常,使用jquery意味着你不必一直担心DOM元素。你可以这样写- $('div.mine'). addclass ('someClass')。Bind ('click', function(){alert('lalala')}) -这段代码将执行而不会抛出任何错误。
在某些情况下,这是有用的,在某些情况下-根本不是,但这是一个事实,jquery倾向于,嗯,空匹配友好。但是,如果试图将replaceWith与不属于文档的元素一起使用,则会抛出错误。我觉得这是违反直觉的。
另一个陷阱是,在我看来,由prevAll()方法返回的节点顺序- $('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()。其实没什么大不了的,但我们应该记住这个事实。
其他回答
将id而不是jQuery对象传递给函数:
myFunc = function(id) { // wrong!
var selector = $("#" + id);
selector.doStuff();
}
myFunc("someId");
传递一个包装集要灵活得多:
myFunc = function(elements) {
elements.doStuff();
}
myFunc($("#someId")); // or myFunc($(".someClass")); etc.
使用字符串累加器样式
使用+运算符在内存中创建一个新的字符串,并将连接的值赋给它。只有在此之后,结果才被赋值给一个变量。 为了避免连接结果的中间变量,可以使用+=运算符直接分配结果。 慢:
a += 'x' + 'y';
速度:
a += 'x';
a += 'y';
基元操作可能比函数调用快
考虑在性能关键循环和函数中使用替代基元操作而不是函数调用。 慢:
var min = Math.min(a, b);
arr.push(val);
速度:
var min = a < b ? a : b;
arr[arr.length] = val;
请参阅JavaScript性能最佳实践
过度使用链条。
看到这个:
this.buttonNext[n ? 'bind' : 'unbind'](this.options.buttonNextEvent, this.funcNext)[n ? 'removeClass' : 'addClass'](this.className('jcarousel-next-disabled')).attr('disabled', n ? false : true);
解释
没有意识到性能受到了影响,并且过度使用选择器而不是将它们分配给局部变量。例如:-
$('#button').click(function() {
$('#label').method();
$('#label').method2();
$('#label').css('background-color', 'red');
});
而不是:
$('#button').click(function() {
var $label = $('#label');
$label.method();
$label.method2();
$label.css('background-color', 'red');
});
或者更好的链接:-
$('#button').click(function() {
$("#label").method().method2().css("background-color", "red");
});
当我意识到调用栈是如何工作的时候,我发现这是一个具有启发性的时刻。
编辑:在评论中加入建议。
尝试分离出匿名函数,这样就可以重用它们。
//Avoid
$('#div').click( function(){
//do something
});
//Do do
function divClickFn (){
//do something
}
$('#div').click( divClickFn );