2016-08-04 43 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選擇器的文本節點,因爲它們只能定位元素,而文本節點不是元素,而只是節點,因此無法選擇。所以,換句話說,循環是必不可少的。 –

相關問題