2012-10-16 50 views
8
  1. 这两个代码段做的是相同的东西吗?如果是,那么应该在什么时候使用另一个? (除了当你需要做一些涉及ivaluejQuery选择器循环与使用函数每个

    $("foo").each(function(i,value) { 
        $(this).empty(); 
    }); 
    

    $("foo").empty(); 
    
  2. 一般可以在假设$("foo").someMethod()意思是“运行somemethod()相匹配的每个元素选择器,除非方法的名称是each?(即每个都是特殊情况)

+1

如果你不” t需要你正在清空的项目的索引,不需要使用'each() '命令。使用较短的语法。 – Lix

+1

@Lix:它也运行得更快:http://jsperf.com/jquery-selector-looping-vs-using-function-each – RASG

回答

4

假设你指的是股票jQuery函数,是的,这两个代码片段是相同的。

您应该使用each()函数来处理索引或防止长函数链接。

您对$('foo').someMethod()的理解对于jQuery方法是正确的。但需要注意的是,一些插件可能会以不同的方式处理选择器,或者仅影响第一个匹配的元素。

+0

你能否详细说明一个插件如何以这种方式“肮脏”jquery选择器? (如果您指的是$('')) – wal

+0

它并不会“肮脏”选择器,但插件可能只能处理第一个匹配的元素,例如。 – BenM

3

是的,大多数jQuery功能都是这样设计的。

看的代码示例:

$.fn.someMethod = function() { 
    return this.each(function() { 
     do_something(this); 
    }); 
}; 

所以,即使你可以再次使用.each,你应该只使用:

$(selector).someMethod();

$(selector).each(function() { 
    $(this).someMethod(); 
}); 
+0

我目前的jquery noob-ness不了解这个意义。你能否解释一下'$ .fn.someMethod'部分。 – wal

+0

@wal这意味着将方法放在jQuery的原型上。您可以查看一些如何制作jQuery插件的文章。 – xdazz