js - 问题使用previouselementsibling获取文本

时间:2013-07-21 06:01:12

标签: javascript get element

我尝试使用此代码获取文本获取此文本,但仍然失败。 你能分析出错了什么吗?

<table class="table  table-bordered" border="1">
<tbody>
<tr>
<td rowspan="2"><div id="foto"><img src="http://a0.twimg.com/profile_images/378800000163861066/61dee118c22e6ddb6fea2ffdb2957bd7_normal.jpeg"></div></td>
<td><div id="tweet31898">**GET THIS TEXT**</div>    
</td>
</tr>
<tr>
<td>
<input type="radio" name="pos31898" value="POS" onclick="addPOS(this.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-success">Pos</span>
<input type="radio" name="pos31898" value="NON" onclick="addNON(this.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-warning">Non</span>
<input type="radio" name="pos31898" value="NEG" onclick="addNEG(this.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-important">Neg</span>
</td>
</tr>
</tbody>
</table>

1 个答案:

答案 0 :(得分:0)

pos31898查找实例, 没有previousElementSibling,它是其容器中的第一个元素。如果你缩进HTML,这就更明显了:

<table class="table  table-bordered" border="1">
  <tbody>
    <tr>
      <td rowspan="2">
        <div id="foto"><img src="http://a0.twimg.com/profile_images/378800000163861066/61dee118c22e6ddb6fea2ffdb2957bd7_normal.jpeg"></div>
      </td>
      <td>
        <div id="tweet31898">**GET THIS TEXT**</div>
      </td>
    </tr>
    <tr>
      <td>
        <input type="radio" name="pos31898" value="POS" onclick="addPOS(this.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-success">Pos</span>
        <input type="radio" name="pos31898" value="NON" onclick="addNON(this.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-warning">Non</span>
        <input type="radio" name="pos31898" value="NEG" onclick="addNEG(this.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.previousElementSibling.innerHTML+' ');"><span class="label label-important">Neg</span>
      </td>
    </tr>
  </tbody>
</table>

当然,简单的方法是document.getElementById("tweet31898"),因为id上有一个div。由于您的单选按钮在name中包含该号码,因此您可以使用id派生this.name.replace('pos', 'tweet')。 E.g:

onclick="addPOS(document.getElementById(this.name.replace('pos', 'tweet')).innerHTML + ' ')"

Live Example | Live Source

但是从结构上来说,你希望parentNode转到td,然后再转到tr,然后previousElementSibling获取前一个tr然后lastElementChild转到td,然后firstElementChild转到div

onclick="addPOS(this.parentNode.parentNode.previousElementSibling.lastElementChild.firstElementChild.innerHTML + ' ')"

Live Example | Live Source