2016-08-04 3 views
2

非常に長いhtmlテーブル(ランダムな長さ)の全列のすべてのinnerTextを取得します。 私はこのコードを使用しています:document.querySelectorAll選択したすべての要素のinnerTextを一度に取得します。純粋なjavascript

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

どこCIDX =私はからコンテンツを抽出したい列インデックス。

しかし、そのようなコードはすべてのtd要素を抽出します(内部のinnerTextはもちろんです)。 しかし、内部のすべてのinnerTextを直接抽出するわけではありません。この原因私はそれぞれのtbEls [i]要素からそれ自身のinnerTextを抽出するforループを使って返されたtdEls配列を再処理しなければなりません。それはしかし、作品...

私の質問は:純粋なJS(外部ライブラリやフレームワーク)で

ちょうどいくつかの方法を改善し、より直接的なアプローチを使用することも可能であり、唯一の querySelectorAllパラメータ('#tBodyID tr td:nth-child(cidx)')へ直接すべてのtd要素innerTextを一度ににして、ただ1つのjavascript文で、返された配列をforループなどで再処理する必要はありませんか?

つまり、何らかの余分なループを一度にすべて取り除くために使用できる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 

ありがとう:私はと類似の配列を取得したい

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

答えて

4

私が見つけた最も簡単な方法は、マップを使用まず配列にnodelistとを変換することでした:それは私のものより短く、興味深いアプローチである

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の返された値を再処理するために使用する通常のforループよりも高速かつ効率的であるかどうかはわかりません。 –

+1

@willyあなたは単一のステートメントにvarsをインライン化することができます。私のバージョンはforループよりも遅いです。これは、コレクションに対して3回反復するためです。 – Simon

+0

私はこの質問に対する可能な回答の1つは です。el.queryselectorall(引数) "solo"は元の事後原因を尋ねることはできませんqueryselectorallの引数はcssセレクタのみにすることができます:したがって、tdをターゲットにすることはできませんテキストセレクタは要素だけを対象とすることができ、テキストノードは要素ではなくノードだけなので選択できません。 つまり、ループは不可欠です。 –

関連する問題