获取下一个兄弟节点父节点的子节点不工作Javascript DOM

时间:2016-04-03 07:16:50

标签: javascript html dom

我有这段HT​​ML代码。

<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"。感谢有人可以帮助我。我的下面的代码给了我undefined。谢谢。

下面,我使用parentElement调用节点的class="image"并指示它转到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

我打算抓住所有诺贝尔奖获得者的名字。

1 个答案:

答案 0 :(得分: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;
},[])