<html>
<head>
<title></title>
<script type="text/javascript"><!--
function test2() {
var val2 = document.getElementById("ex2").childNodes[1].childNodes[0].nodeValue;
alert(val2);
}
--></script>
</head>
<body>
<div id="ex2">Web courses - <span>http://coursesweb.net</span> - lessons, tutorials</div>
<a href="#" onclick="test2()" title="childNodes example">Test 2</a>
</body>
</html>
但是,如果我添加<p>Some text</p>
而不是我尝试添加childNodes[2]
则无效。
有人可以解释一下这段代码和ChildNode
概念。
答案 0 :(得分:3)
跟踪我们发现的原始查询document.getElementById("ex2").childNodes[1].childNodes[0].nodeValue;
:
document.getElementById("ex2")
=&gt; <div id="ex2">Web courses -<span>http://coursesweb.net</span> - lessons, tutorials</div>
因为textNode“Web课程”是第一个节点
.childNodes[1]
=&gt; <span>http://coursesweb.net</span>
.childNodes[0]
=&gt; textNode "http://coursesweb.net"
.nodeValue
=&gt; "http://coursesweb.net"
如果您想添加<p>Some text</p>
制作原始的ex2字符串:
<div id="ex2">Web courses - <span>http://coursesweb.net</span><p>Some text</p> - lessons, tutorials</div>
现在
document.getElementById("ex2").childNodes[2].childNodes[0].nodeValue;
=&gt; "Some text"
答案 1 :(得分:1)
childNodes属性返回节点子节点的集合,作为NodeList。
提示:您可以使用length属性来确定子节点的数量,然后您可以遍历所有子节点并提取所需的信息。
在此JavaScript中返回“http://coursesweb.net”,因为id为ex2的div具有子节点,我们得到它的值。
答案 2 :(得分:1)
注意childNodes,无论您使用的是IE 8(或更低版本)以及其他浏览器,其内容都会有所不同:
Firefox和大多数其他浏览器会将空白空格或新行视为文本节点,Internet Explorer不会
http://quirksmode.org/dom/core/#t70
这意味着如果您只是在两个节点之间添加空格或新行,在某些浏览器上,两个节点将在childNodes中彼此相邻,或者将由空节点分隔。
在FireFox中:
<div>hey</div> <p>Some text</p> // childNodes[0] : hey, childNodes[1] : some text
与
的结果不同<div>hey</div>
<p>Some text</p> // childNodes[0] : hey, childNodes[1] : nothing, childNodes[2] : some text
在Internet Explorer中,两者都是相同的(childNodes [0]:嘿,childNodes [1]:some text)
如果可以的话,你宁可使用jQuery .find()直接挖掘给定的显式标识符。
但是如果你需要内省现有的DOM树,你需要处理这个烦人的事实。见best way to get child nodes