$.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()
只是一个“辅助工具”,它可以循环任何类型的 Array
或 Object
,但当然您必须告诉该方法您要迭代哪个目标。
无论您传入数组还是对象,它都会照顾您,它会在后台使用 for-in
或 for 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()的区别详解