我有代码假设找到一个 div 的第一个子节点(div)而不是改变它的内容,这是我的代码:
var headDiv = document.getElementById('sliderContainer');
var childDiv = headDiv.childNodes[0];
childDiv.innerHTML = 'Working';
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,这是什么问题?
直播:http : //jsbin.com/aqozef/edit#javascript,html,live
完整代码:
<!doctype html>
<html>
<head>
<script type="javascript">
function scrollit(){
var headDiv = document.getElementById('sliderContainer');
var childDiv = headDiv.childNodes[0];
childDiv.innerHTML = 'Working';
}
</script>
<style type="text/css">
#sliderContainer{width:100px;height:100px;overflow:hidden;}
.sliderContent{width:100px;height:100px;float:left;}
</style>
</head>
<body>
<div id="sliderContainer">
<div class="sliderContent" style="background-color:blue;">s</div>
<div class="sliderContent" style="background-color:yellow;">a</div>
</div><br/><br/>
<button onclick="scrollit();">scroll it</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
第一个子节点很可能是文本节点而不是元素节点。例如,当您的 HTML 如下所示时,就是这种情况:
<div>
<div> I'm the first element child</div>
</div>
Run Code Online (Sandbox Code Playgroud)
第一个之后的换行符div和第二个之前的空格是一个文本节点。
要获取元素节点,请使用children [MDN]:
headDiv.children[0].innerHTML = "Working";
Run Code Online (Sandbox Code Playgroud)
注意: IE6 - IE8 也包含注释节点children。只要你在那里没有评论,就可以了。
或者,您可以遍历子节点,寻找第一个元素节点:
var child = element.firstChild;
while(child && child.nodeType !== 1) child = child.nextSibling;
Run Code Online (Sandbox Code Playgroud)
参考: Node.firstChild , Node.nodeType, Node.nextSibling。
如果你想改变一个文本节点的值,你必须改变nodeValue [MDN]属性:
node.nodeValue = "Working";
Run Code Online (Sandbox Code Playgroud)