我开始一个项目与jQuery。

在你的jQuery项目中有哪些陷阱/错误/误解/滥用/误用?


当前回答

避免创建多个相同的jQuery对象

//Avoid
function someFunc(){
   $(this).fadeIn();
   $(this).fadeIn();
}

//Cache the obj
function someFunc(){
   var $this = $(this).fadeIn();
   $this.fadeIn();
}

其他回答

在一个小项目中使用jQuery,只需几行普通的JavaScript就可以完成。

尝试分离出匿名函数,这样就可以重用它们。

//Avoid
$('#div').click( function(){
   //do something
});

//Do do
function divClickFn (){
   //do something    
}

$('#div').click( divClickFn );

进行过多的DOM操作。虽然.html(), .append(), .prepend()等方法很棒,但由于浏览器呈现和重新呈现页面的方式,经常使用它们会导致速度变慢。通常更好的方法是将html创建为字符串,并将其包含到DOM中一次,而不是多次更改DOM。

而不是:

var $parent = $('#parent');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $parent.append($div);
}

试试这个:

var $parent = $('#parent');
var iterations = 10;
var html = '';

for (var i = 0; i < iterations; i++){
    html += '<div class="foo-' + i + '"></div>';
}

$parent.append(html);

甚至这个($wrapper是一个新创建的元素,还没有注入到DOM中。将节点附加到这个包装器div不会导致速度变慢,最后我们将$wrapper附加到$parent,只使用了一个DOM操作):

var $parent = $('#parent');
var $wrapper = $('<div class="wrapper" />');
var iterations = 10;

for (var i = 0; i < iterations; i++){
    var $div = $('<div class="foo-' + i + '" />');
    $wrapper.append($div);
}

$parent.append($wrapper);

不要滥用插件。

大多数情况下,您只需要库和用户界面。如果你保持简单,你的代码在长期运行中是可维护的。并不是所有插件都得到支持和维护,实际上大多数插件都不是。如果你可以使用核心元素模拟功能,我强烈推荐你这么做。

插件很容易插入到代码中,为您节省了一些时间,但是当您需要额外的东西时,修改它们是一个坏主意,因为您失去了可能的更新。您在开始时节省的时间将在稍后更改已弃用插件时浪费掉。

明智地选择您使用的插件。 除了库和用户界面,我经常使用$。Cookie, $。形式,美元。验证和thickbox。至于其余部分,我主要开发自己的插件。

用回调“链接”动画事件。

假设你想让一个段落在点击后消失。您还希望随后从DOM中删除该元素。你可能认为你可以简单地链接这些方法:

$("p").click(function(e) {
  $(this).fadeOut("slow").remove();
});

在这个例子中,.remove()将在. fadeout()完成之前被调用,破坏渐变效果,只是让元素立即消失。相反,当你想在完成前一个命令后才触发一个命令时,使用回调函数:

$("p").click(function(e){
  $(this).fadeOut("slow", function(){
    $(this).remove();
  });
});

. fadeout()的第二个参数是一个匿名函数,它将在. fadeout()动画完成后运行。这使得逐渐褪色,并随后删除元素。