document.querySelectorAll 一次获取所有选定元素的 innerText 纯javascript

Posted

技术标签:

【中文标题】document.querySelectorAll 一次获取所有选定元素的 innerText 纯javascript【英文标题】:document.querySelectorAll get innerText of ALL selected elements at once pure javascript 【发布时间】:2016-12-11 00:18:30 【问题描述】:

我想获取一个非常长的 html 表(随机长度)的一整列的所有 innerText。 我正在使用此代码:

var tbEls = document.querySelectorAll('#tBodyID tr td:nth-child(cidx)');

其中 cidx = 我要从中提取内容的列索引。

但是这样的代码会提取所有的 td 元素(当然,其中包含 innerText)。 但它不会直接提取其中的所有 innerText 。因此,我必须使用 for 循环重新处理返回的 tdEls 数组,以从每个 tbEls[i] 元素中提取其自己的 innerText。它有效,但是......

我的问题是:

在纯 JS(没有外部库或框架)中,是否可以使用更直接的方法改进某种方式 querySelectorAll 参数('#tBodyID tr td:nth-child(cidx)') 直接获得所有 td元素 innerText 一次,只在一个 javascript 语句中,而不需要使用 for 循环或其他任何东西重新处理返回的数组?

换句话说,是否有某种 innerText 选择器可以用来一次获取所有内容而无需任何额外的循环?

如果老浏览器不识别完全没有问题,对不起。

我希望达到的目标是:

var arrTblColInnerText = document.querySelectorAll('#tBodyID tr td:nth-child(cidx):alltd:innerText');

我想得到一个类似的数组:

0: value from column cidx cell 0
1: value from column cidx cell 1
2: value from column cidx cell 2
3: value from column cidx cell 3
...
n: value from column cidx cell n

提前致谢。

【问题讨论】:

我认为对这个问题的一个可能的回答是: el.queryselectorall(arguments) 行为“独奏”不能做原始帖子中所要求的事情,因为 queryselectorall 的参数只能是 css 选择器:所以它无法使用 CSS 选择器定位 td 文本节点,因为它们只能定位元素,而文本节点不是元素,而只是节点,因此无法选择。所以,换句话说,循环是必不可少的。 【参考方案1】:

这是 2021 年的单行代码。它表示将从 querySelectorAll 返回的 NodeList 设为一个数组,然后将 innerText 映射到一个数组中。

Array.from(document.querySelectorAll("h3 em")).map(x => x.innerText)

【讨论】:

【参考方案2】:

我发现的最简单的方法是先将 nodeList 转换为数组,然后使用映射:

var nodes = document.querySelectorAll("h3 em");
var list = [].slice.call(nodes);
var innertext = list.map(function(e)  return e.innerText; ).join("\n");

【讨论】:

这是一个有趣的方法,比我的短,但是我仍然希望在一个语句中找到每个 innerText,优化 queryselectorAll 参数。不过,我对您的回复投了赞成票,因为它比我的要短。不幸的是,我不确定“slice”、“map”和“join”的组合是否比我用来重新处理 querySelector 的返回值的普通 for 循环更快、更有效。 @willy 您可以将变量内联到单个语句中。我的版本比 for 循环慢,因为它在集合上迭代了 3 次。 使用现代语法,您可以这样做:[...document.querySelectorAll('h3 em')].map(o => o.innerText).join('\n');

以上是关于document.querySelectorAll 一次获取所有选定元素的 innerText 纯javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历document.querySelectorAll()方法返回的结果

为啥 document.querySelectorAll 返回的是 StaticNodeList 而不是真正的 Array?

querySelectorAll() 的用法

使用querySelectorAll选择与document.URL匹配的所有href?

document.querySelectorAll 一次获取所有选定元素的 innerText 纯javascript

如何跳过 document.querySelectorAll 值为 null 或不存在