如何获取子节点的nodeValue

时间:2014-01-24 16:45:08

标签: javascript html dom

我有一个HTML表,其行与此类似:

    <tr>
        <td>11/05/2013</td>
        <td>CBC W/DIFF</td>
        <td>&#xA0;</td>
        <td> <content ID="result210">Wbc: 4.5 X10E3/UL</content> </td>
        <td>Final</td>  
    </tr>

我想得到nodeValue&#34; Wbc:4.5 X10E3 / UL&#34;

到目前为止,这是我的javascript代码:

var table = section.getElementsByTagName("table")[0];
var tablebody = table.getElementsByTagName("tbody")[0];
var rows = tablebody.getElementsByTagName("tr");
for (i=0; i<rows.length; i++) {
    var cells = rows[i].getElementsByTagName("td");
    var date        = cells[0].childNodes[0].data;
    var panel       = cells[1].childNodes[0].data;
    var result      = cells[2].childNodes[0].data;
    var description = cells[3].childNodes[0];
    var content     = description.firstChild.nodeValue;  //SCRIPT5007: Unable to get property 'nodeValue' of undefined or null reference
    var status      = cells[4].childNodes[0].data;  
    console.log(date +" " +panel +" " +result +" " +content +" " +status);
}

报告的错误是&#34; SCRIPT5007:无法获取属性&#39; nodeValue&#39;未定义或空引用&#34;

如果我注释掉描述和内容部分,则会正确报告其他字段,因此我知道我已经关闭了。 我也尝试过:

var content =  description.firstChild.firstChild.nodeValue;  //SCRIPT5007: Unable to get property 'firstChild' of undefined or null reference 

var content = description.getElementsByTagName("content").childNodes[0].nodeValue;  //SCRIPT438: Object doesn't support property or method 'getElementsByTagName' 

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

由于您的空间在

,第一个子节点是文本节点
<td> <content ID="result210">Wbc: 4.5 X10E3/UL</content> </td>

你想要的是获得第一个子元素:

var content     = cells[3].children[0].innerHTML;;

Demonstration

更一般地说,你不应该在大多数时候使用节点,因为很难确定没有空格或换行。

另请注意,很少涉及这样的元素:使用类和基于查询的选择函数,您可以获得更可靠和可读的代码。在这里,你有一个id,你应该只做

var content = document.getElementById("result210").innerHTML;

你的问题在这一点上并不清楚:我希望你没有在多行上有这种id的元素(id不能被赋予多个元素)。假设你有一个班级,那就是

var content = rows[i].getElementsByClassName("result210").innerHTML;