【问题标题】: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 width="20px"><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() {})案例。

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

【问题讨论】:

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

标签: jquery each


【解决方案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

资源

【讨论】:

    【解决方案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,即使它是一个简单的字符串或数字值。)该方法返回其第一个参数,即被迭代的对象。

              【讨论】:

                猜你喜欢
                • 2011-09-23
                • 2018-02-14
                • 1970-01-01
                • 1970-01-01
                • 2017-08-07
                • 2020-07-07
                • 2020-05-18
                • 2017-06-09
                • 1970-01-01
                相关资源
                最近更新 更多