$.each(selector) 和 $(selector).each() 有啥区别

Posted

技术标签:

【中文标题】$.each(selector) 和 $(selector).each() 有啥区别【英文标题】:What is the difference between $.each(selector) and $(selector).each()$.each(selector) 和 $(selector).each() 有什么区别 【发布时间】:2011-09-30 11:17:57 【问题描述】:

这有什么区别:

$.each($('#myTable input[name="deleteItem[]"]:checked').do_something());

还有这个:

$('#myTable input[name="deleteItem[]"]:checked').each(function()  do_something );

被选中和操作的表格单元格的 html 如下所示:

<td ><input type="checkbox" class="chkDeleteItem" name="deleteItem[]" value="' . $rowItem['itemID'] . '" /></td>

我已经阅读了 jQuery 文档,但我仍然不明白其中的区别。 (是我还是那个文档有时在内容清晰度上有点“模糊”?)

添加信息:

显然我尝试一个通用的例子让人们感到困惑!连同第一个示例中的(以前)缺少的括号。 :(

第一个示例来自我的代码中的一行,它删除了任何带有选中复选框的行的

$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove());

第二个示例来自我查看#classesTable 中所有选中的复选框并在下拉列表中删除其匹配项的情况。

$('#classesTable input[name="deleteClasses[]"]:checked').each(function()
    $('#classesList option[value="' + $(this).attr('value') + '"]').remove();
);

我知道他们做了两件不同的事情,但我不能说“我需要在这种情况下使用 $.each() 而在另一种情况下使用 .each(function() )案例。

它们可以互换吗?仅在某些情况下?从来没有?

【问题讨论】:

您的第一个代码示例缺少右括号。 注释和逗号,示例见我的回答。 第一个例子的意图可以用几种不同的方式来解释。请更正它以反映您实际在做什么。 我在行尾添加了缺少的右括号,就在分号之前。 【参考方案1】:

说明:

.each 是一个迭代器,仅用于迭代 jQuery 对象集合,而jQuery.each ($.each) 是一般 用于迭代 javascript 对象和数组的函数。


示例

1) 使用$.each() 函数

var myArray = [10,20,30];

$.each( myArray, function(index, value) 
   console.log('element at index ' + index + ' is ' + value);
);

//Output
element at index 0 is 10
element at index 1 is 20
element at index 2 is 30

2) 使用.each() 方法

$('#dv').children().each(function(index, element) 
    console.log('element at index ' + index + 'is ' + (this.tagName));
    console.log('current element as dom object:' + element);
    console.log('current element as jQuery object:' + $(this));
);

//Output
element at index 0 is input
element at index 1 is p
element at index 2 is span

资源

https://api.jquery.com/jquery.each/ http://api.jquery.com/each/ jQuery to loop through elements with the same class

【讨论】:

【参考方案2】:

来自http://api.jquery.com/jQuery.each:

$.each() 函数不一样 as .each(),用于迭代, 完全通过一个 jQuery 对象。这 $.each() 函数可用于 遍历任何集合,无论是 它是一个地图(JavaScript 对象)或一个 数组。

【讨论】:

【参考方案3】:

您想真正将$.each 与不是元素或其他东西的数组一起使用。即:

var x = ["test", "test2"];

您将使用 $.each(x... 而不是 x.each 来遍历它:)

.each 仅用于元素 :)

【讨论】:

【参考方案4】:

没有功能上的区别。每个 jQuery 对象都拥有一个继承自 jQuery.fn.each() 方法。通过调用这个object method,jQuery 已经知道要迭代哪个Array (-like object)。换句话说,它从当前的 jQuery 对象中循环遍历 indexed propertys

另一方面,$.each() 只是一个“辅助工具”,它可以循环任何类型的 ArrayObject,但当然您必须告诉该方法您要迭代哪个目标。 无论您传入数组还是对象,它都会照顾您,它会在后台使用 for-infor loop 做正确的事情。

【讨论】:

【参考方案5】:

第一个将对您传入的集合中的元素运行回调函数,但您的代码目前在语法上不正确。

应该是:

$.each($('#myTable input[name="deleteItem[]"]:checked'), do_something);

见:http://api.jquery.com/jQuery.each/

第二个将在您正在运行的集合的每个元素上运行该函数。

见:http://api.jquery.com/each/

【讨论】:

您正在调用 do_something 而不是传递它。这是不正确的,除非 do_something 恰好返回一个函数。【参考方案6】:

在第一种情况下,您可以迭代 jQuery 对象和其他数组项,如下所示:

jQuery.each()

在第二种情况下,您只能迭代 jQuery 对象,如下所示:

.each()

【讨论】:

【参考方案7】:

据我了解,$.each(); 循环遍历一个对象或数组,并为您提供每个项目的迭代器和值。

$().each(); 循环遍历 jQuery 对象列表并为您提供迭代器和 jQuery 对象。

【讨论】:

【参考方案8】:

取自http://api.jquery.com/jQuery.each/

$.each() 函数与 .each() 不同,后者用于以独占方式迭代 jQuery 对象。 $.each() 函数可用于迭代任何集合,无论是映射(JavaScript 对象)还是数组。在数组的情况下,回调每次都会传递一个数组索引和一个对应的数组值。 (该值也可以通过 this 关键字访问,但 Javascript 将始终将 this 值包装为一个 Object,即使它是一个简单的字符串或数字值。)该方法返回其第一个参数,即被迭代的对象。

【讨论】:

以上是关于$.each(selector) 和 $(selector).each() 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Jquery的$(selector).each()和$.each()原理和区别

JQuery中$.each 和$(selector).each()的区别详解

JQuery中$.each 和$(selector).each()的区别详解

JQuery中$.each 和$(selector).each()的区别详解

$(selector).each() 和$each() 的区别

$.each()和$(selector).each()