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

相关问题