2016-04-03 11 views
0

私はこのHTMLコードブロックを持っています。次の兄弟親ノードの子ノードを取得Javascript DOM

<tbody> 
    <tr> 
    <td><a href='/some/link' class="image"> ... </a></td> 
    <td><a href="/some/link2" title="foo"> SOME TEXT </a></td> 
    </tr> 
    <tr> 
    <td> some td node that appears randomly </td> 
    <td><a href='/some/link' class="image"> ... </a></td> 
    <td><a href="/some/link2" title="foo"> SOME TEXT </a></td> 
    </tr> 
</tbody> 

私はclass="image"<td>要素のnextSiblingある<td>要素を取得したいです。誰かが私を助けることができることを感謝します。以下の私のコードは、私には未定義です。ありがとうございました。

以下、私はclass="image"を持つノードのparentElementと呼ばれ、nextSiblingノードに移動して、その特定のノードのchildNodeを取得し、最終的にはテキストを取得することを指示しました。なぜそれが動作しないのか分かりません。

var nodes = document.querySelectorAll('tbody > tr > td > a.image'); 
return Array.prototype.map.call(nodes, function(e) { 
    return e.parentElement.nextSibling.childNodes[1].a.innerText; 
} 

サイトURL:https://en.wikipedia.org/wiki/List_of_Nobel_Peace_Prize_laureates

Screenshot of HTML

私はノーベル賞受賞者のすべての名前をつかむしようとしています。続き

答えて

0

Array.prototype.map.call(nodes, function(e) { 
    return e.parentElement.nextElementSibling.childNodes[1].innerText; 
}) 

EDIT動作します:与えられたのWikiリンクに基づいて

を、私たちは以下のように異なる方法で、そのうちの一つでそれを行うことができます。各tr名前

var trs = document.querySelectorAll('.wikitable tr');// 'tbody > tr > td > a.image' will give a.image inside single tr also which may fail 

Array.prototype.reduce.call(trs,function(result,tr){ 
var e = tr.querySelector('td .image') 
if(e && e.parentElement.nextElementSibling) 
    result.push(e.parentElement.nextElementSibling.querySelector('a').innerText); 
    return result; 
},[]) 
+0

こんにちは@Jagsが含まれていますと仮定

。ご回答有難うございます。私はあなたの答えは正しいと思うが、どういうわけかそれは動作しません。それは私にnullを与える。ページのリンクと正確なコードのスクリーンショットを含めるように質問を編集しました。 – Ming

+0

@Mingは答えを編集しました。さらに多くのケースを処理する必要があります。 – JagsSparrow

+0

ありがとうございます。私はそれを試してみましょう。 – Ming

関連する問題