【问题标题】:Does jQuery selector iterates through all elements?jQuery 选择器是否遍历所有元素?
【发布时间】:2021-11-10 02:32:04
【问题描述】:

我的页面上有多个链接,我想为所有链接创建相同的事件处理程序。

在第一个示例中,我只使用了一个选择器,它为两个链接正确地创建了事件处理程序:

$(document).ready(function () {
    $('.link').on('click', function () {
        alert($(this).text() + ' was clicked');
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href='#' class='link'>Link1</a>
<a href='#' class='link'>Link2</a>

在第二个示例中,我遍历每个元素并为每个元素创建事件处理程序:

$(document).ready(function () {
    $('.link').each(function(){
      $(this).on('click', function(){
        alert($(this).text() + ' was clicked');
      });
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href='#' class='link'>Link1</a>
<a href='#' class='link'>Link2</a>

两者都产生相同的结果,但为什么呢? jQuery 选择器是否已经遍历所有元素? jQuery 选择器是总是 迭代所有元素还是只在某些场景下迭代?

【问题讨论】:

  • 这能回答你的问题吗? jQuery .each() - Practical uses?
  • @LW001:您链接的问题解释了每个选择器的工作原理,这很棒......我不明白的是:jQuery 选择器会自动遍历所有选择器吗?似乎确实... jQuery 选择器总是遍历选择器还是有特定的场景?
  • @HoomanBahreini 我认为这回答了你的问题:How can I learn how jQuery selectors work behind the scenes?
  • @GeorgeSun:这真的是一个不同的问题,它是在询问 jQuery 选择器如何找到一个元素。
  • 如果我理解正确,您正在寻找Implicit iteration,TL;DR:选择($('.link'))返回一个选择,如项目列表。根据你用它做什么,可能会发生隐式迭代(通常在你的例子中使用像.on()这样的setter),如果你需要一个不隐式迭代的函数(通常是Getters),你会想使用@来迭代自己987654330@

标签: javascript jquery jquery-selectors


【解决方案1】:

您正在寻找的概念称为Implicit iteration

jQuery Documentation 中提到了.each()

注意:大多数返回 jQuery 对象的 jQuery 方法也会循环遍历 jQuery 集合中的元素集——这个过程称为隐式迭代。发生这种情况时,通常不需要显式地使用 .each() 方法进行迭代。

使用$('.link') 选择某些内容会返回一个选择,这就像一个符合选择器中列出的标准的项目列表(在本例中为类link 的元素)。选择本身不会遍历任何内容,它只是为您提供一个项目列表。

根据您之后对选择所做的操作,可能会发生隐式迭代。例如,大多数二传手的情况(在您的情况下为.on())。 Setter 将遍历选择并应用于其中的所有项目。

不隐式迭代的函数(通常是 Getters)是您想要在多个项目上运行时使用 .each() 自行迭代的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2014-03-24
    • 2013-10-23
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多