为啥 jQuery 在选择器中链接 .attr() 时只选择一个元素?

Posted

技术标签:

【中文标题】为啥 jQuery 在选择器中链接 .attr() 时只选择一个元素?【英文标题】:Why does jQuery select only one element when chaining .attr() in selector?为什么 jQuery 在选择器中链接 .attr() 时只选择一个元素? 【发布时间】:2021-05-13 16:14:57 【问题描述】:

我有一个简单的链接列表:

<ul>
  <li><a href="1">link 1</a></li>
  <li><a href="2">link 2</a></li>
  <li><a href="3">link 3</a></li>
  <li><a href="4">link 4</a></li>
  <li><a href="5">link 5</a></li>
  <li><a href="6">link 6</a></li>
  <li><a href="7">link 7</a></li>
  <li><a href="8">link 8</a></li>
  <li><a href="9">link 9</a></li>
  <li><a href="10">link 10</a></li>
</ul>

如何使用 jQuery 选择这些链接?

$('a') - 返回所有链接

如何获取这些链接的所有内容(“链接 1”、“链接 2”、“链接 3”...)?

$('a').text()

如何从链接(1、2、3...)中获取所有 href?

$('a').attr('href')

不是真的 ^ 它只选择第一个链接并返回 1 而不是 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我知道我可以map,做each 等,但我正在编写一个经常使用它的爬虫,我想知道为什么会发生这种情况,以及我是否可以在这里获得所有没有任何循环的href,只需使用jQuery(最好是 jQuery 核心)选择器?

演示:https://jsfiddle.net/z5j1ty08/

【问题讨论】:

所以只是为了直截了当......你想在没有任何循环的情况下循环链接(以获取它们的内容)? 一个循环是必需的,除非你想硬编码每个索引,这是湿的和愚蠢的。不要那样做。不要害怕循环。计算机 你需要循环。没有别的办法。它不会影响程序的性能。 我知道这听起来很愚蠢,但不知何故,我使用$('a').text() 获取所有链接,并且不需要循环。这里有什么交易? @Wordpressor 在.text() 上的 jQuery 描述:“获取匹配元素集中每个元素的组合文本内容,包括它们的后代,或者设置匹配元素的文本内容。”您可以使用.text() 获取所有元素,但如果您想单独对它们进行操作,则需要遍历每个元素。 【参考方案1】:

如果不循环访问 DOM 元素,您将无法真正循环访问它们。

循环不会对您的网络爬虫的性能产生任何显着影响。

话虽如此,你只是在看:

$('a').each(function() 
  console.log($(this).text());
);

演示:https://jsfiddle.net/q1er5946/

【讨论】:

以上是关于为啥 jQuery 在选择器中链接 .attr() 时只选择一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery 选择器中使用 JavaScript 变量?

jQuery选择器之属性筛选选择器

为啥日期选择器中的日期格式没有改变?

jQuery 选择器中的条件

jquery 选择器帮助

Jquery没有选择正确的href