2016-04-03 159 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> 

我想要得到的<td>元素是<td>元素與class="image"的nextSibling。欣賞某人能幫助我。我的代碼如下給我不明確。謝謝。

下面,我打電話與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; 
} 

網站網址: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; 
}) 

編輯:

根據所給出的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。感謝您的回答。我相信你的回答是正確的,但不知何故它不起作用。它給了我空。我編輯了我的問題,包括頁面的鏈接和確切代碼的屏幕截圖。 – Ming

+0

@Ming編輯了答案,你可能需要處理更多的案例。 – JagsSparrow

+0

非常感謝。我會試一試。 – Ming

相關問題