2016-08-04 41 views
2

我想获得一个非常长的html表(随机长度)的整个列的所有innerText。 我使用这个代码:document.querySelectorAll一次获得所有选定元素的innerText纯javascript

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 

感谢。

回答

4

我发现的最简单的方法是把节点列表转换为数组第一,然后使用地图:

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

这是一个有趣的方法,比我短,不过我还是希望能找到每一个的innerText在短短的一个语句,优化queryselectorAll参数。尽管如此,我仍然积极回应你的回应,因为它比我的短。不幸的是,我不确定“slice”,“map”和“join”的组合是否比用于重新处理querySelector的返回值的正常循环更快,更高效。 –

+1

@willy您可以将变量内联到单个语句中。我的版本比for循环慢,因为它在集合上迭代了三次。 – Simon

+0

我认为这个问题的一个可能的答案是: el.queryselectorall(参数)代理“独奏”不能做什么问到原来的事实queryselectorall的参数可能是css选择器的原因:所以不可能目标td具有CSS选择器的文本节点,因为它们只能定位元素,而文本节点不是元素,而只是节点,因此无法选择。所以,换句话说,循环是必不可少的。 –

相关问题