gpt4 book ai didi

Javascript 教程, 'childNodes' 解决方案不起作用

转载 作者:行者123 更新时间:2023-11-30 14:24:07 25 4
gpt4 key购买 nike

我正在做(强烈推荐)Javascript 教程 ( http://www.newthinktank.com/2015/09/learn-javascript-one-video/ ),其中一个解决方案不起作用。我正在尝试更改第一段的背景颜色,我没有收到任何错误,“开发人员工具”显示“样式”没有更新。我什至从备忘单中复制了代码,但它仍然不起作用。不确定这是版本问题还是真正的错误(它已被查看超过 1,000,000 次,所以我相信现在有人会注意到它)。这是代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel='stylesheet' href='style.css'>
</head>

<body>
<div id="sampDiv">
<p>Lorem ipsum dolor sit amet, <em>consectetur adipiscing</em> elit. Integer feugiat in tortor at scelerisque. Aenean nulla dui, auctor sit amet dignissim et, ultrices non odio. Pellentesque luctus eu ligula id feugiat. Mauris tempus mollis est, eget elementum massa luctus eu.</p>
<p> Sed ac ipsum libero. <b>Donec et leo</b> sit amet ante posuere pretium at eu massa. Donec tincidunt <em>elementum risus</em>, nec scelerisque massa luctus vitae. Praesent blandit tincidunt orci, <b>at commodo eros</b> interdum eu.</p>
</div>
<script>
// first paragraph
var sampDiv = document.getElementById('sampDiv');
sampDiv.childNodes[0].style.backgroundColor = "#F0FFFF";
</script>
</body>
</html>

我知道有很多方法可以实现,例如:

var pElements = document.getElementsByTagName('p');
pElements[0].style.backgroundColor = "#F0FFFF";

...但我很想知道出了什么问题。澄清一下,这是不起作用的代码:

var sampDiv = document.getElementById('sampDiv');
sampDiv.childNodes[0].style.backgroundColor = "#F0FFFF";

我正在运行 Chrome 版本 68.0.3440.106(官方构建)(64 位)

最佳答案

问题是第一个子节点是文本节点(包含 <div id="sampDiv"> 之后和 <p> 之前的空格),而不是元素:

var sampDiv = document.getElementById('sampDiv');
console.log(sampDiv.childNodes[0].nodeName);
<div id="sampDiv">
<p>Lorem ipsum dolor sit amet, <em>consectetur adipiscing</em> elit. Integer feugiat in tortor at scelerisque. Aenean nulla dui, auctor sit amet dignissim et, ultrices non odio. Pellentesque luctus eu ligula id feugiat. Mauris tempus mollis est, eget elementum massa luctus eu.</p>
<p>Sed ac ipsum libero. <b>Donec et leo</b> sit amet ante posuere pretium at eu massa. Donec tincidunt <em>elementum risus</em>, nec scelerisque massa luctus vitae. Praesent blandit tincidunt orci, <b>at commodo eros</b> interdum eu.</p>
</div>

作者应该用了 children ,它只包含元素,而不是 childNodes ,其中包括所有类型的节点:

var sampDiv = document.getElementById('sampDiv');
sampDiv.children[0].style.backgroundColor = "#F0FFFF";
<div id="sampDiv">
<p>Lorem ipsum dolor sit amet, <em>consectetur adipiscing</em> elit. Integer feugiat in tortor at scelerisque. Aenean nulla dui, auctor sit amet dignissim et, ultrices non odio. Pellentesque luctus eu ligula id feugiat. Mauris tempus mollis est, eget elementum massa luctus eu.</p>
<p>Sed ac ipsum libero. <b>Donec et leo</b> sit amet ante posuere pretium at eu massa. Donec tincidunt <em>elementum risus</em>, nec scelerisque massa luctus vitae. Praesent blandit tincidunt orci, <b>at commodo eros</b> interdum eu.</p>
</div>

虽然有人会争辩说 firstElementChild 会比 children[0] 好.

可能是作者没有那个空格,而你用格式化引入了它,或者作者通常通过压缩器运行他/她的 HTML,压缩器可能会删除它,等等,因为如果那样的话代码就可以工作没有空格:

var sampDiv = document.getElementById('sampDiv');
sampDiv.childNodes[0].style.backgroundColor = "#F0FFFF";
<div id="sampDiv"><p>Lorem ipsum dolor sit amet, <em>consectetur adipiscing</em> elit. Integer feugiat in tortor at scelerisque. Aenean nulla dui, auctor sit amet dignissim et, ultrices non odio. Pellentesque luctus eu ligula id feugiat. Mauris tempus mollis est, eget elementum massa luctus eu.</p>
<p>Sed ac ipsum libero. <b>Donec et leo</b> sit amet ante posuere pretium at eu massa. Donec tincidunt <em>elementum risus</em>, nec scelerisque massa luctus vitae. Praesent blandit tincidunt orci, <b>at commodo eros</b> interdum eu.</p>
</div>

关于Javascript 教程, 'childNodes' 解决方案不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52217751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com