gpt4 book ai didi

javascript - nextSibling 而不是 nextElementSibling?

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:33 25 4
gpt4 key购买 nike

这不完全是代码中的问题,但我无法理解问题背后的原因。首先,请看一下代码:

HTML:

<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Head First : Javascript</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="css.css">
<script type="text/javascript" src="cookie.js"></script>
</head>
<body>
<div id="row1">
<p>False</p>
<p>False</p>
<p>True</p>
<p>True</p>
<p>False</p>
</div>
<div id="row2">
<p>False</p>
<p>False</p>
<p>True</p>
<p>False</p>
<p>False</p>
</div>
<div id="row3">
<p>False</p>
<p>True</p>
<p>True</p>
<p>True</p>
<p>True</p>
</div>
<div id="row4">
<p>True</p>
<p>False</p>
<p>False</p>
<p>True</p>
<p>False</p>
</div>
<script type="text/javascript" src="javascript.js"></script>
</body>
</html>

CSS:

p{
display:inline-block;
width:50px;
margin:30px;
text-align:center;
}

JS:

function setElementColor(){
var numberRows = parseInt(window.prompt("Enter total number of rows that you are seeing on the screen."));

for(var i = 1; i <= numberRows; i++){
var firstElement = document.getElementById('row' + i).firstElementChild;
var counterElement;
//For now, total elements in 1 row = 5
for(var q = 1; q <= 5; q++){
if(q == 1){
firstElement.style.backgroundColor = "red";
counterElement = firstElement.nextSibling;
}
else{
counterElement.style.backgroundColor = "green";
}
counterElement = counterElement.nextElementSibling;
}
}
}
setElementColor();

现在,这可能是一个愚蠢的问题,但它是有道理的(我相信)。您看到的代码是正确的,并且可以毫无疑问地工作。但是,您能在第一个 if 语句中看到 nextSibling 属性吗?这就是让我困惑的地方。

现在,所有段落之间都有空格,这意味着所有浏览器都会将这些空格视为 textNode(IE 除外)。现在,根据逻辑,那里应该有一个 nextElementSibling 属性,这样代码就可以期待下一个元素,忽略评论/文本节点,但我试过了,那是行不通的.

谁能给我一个令人满意的理由?

最佳答案

在您的第一个 if 中,counterElement 设置为 nextSibling,作为文本节点

if
{
counterElement = firstElement.nextSibling; //now counterElement is the textnode
}
else
{
}
counterElement = counterElement.nextElementSibling; //no matter if the counterElement is a textnode or a <p> the next element in the sibling tree is a <p>

但是不管 q 和 if..else 分支如何,在 if..else block 之后,counterElement 被设置为下一个 Element 兄弟,因此无论起点是文本节点还是包含段落,下一个元素将是同级段落。如果您在 q == 1 block 中设置 counterElement = firstElement

,代码将表现相同

顺便说一句,要摆脱固定的上界(列)并同时放松 if..else,您还可以使用类似的东西

for(var i = 1; i <= numberRows; i++){
var el = document.getElementById('row' + i).firstElementChild;
var q = 1;
while (el!=null){
el.style.backgroundColor = q++ == 1 ? "red" : "green";
el = el.nextElementSibling;
}
}

关于javascript - nextSibling 而不是 nextElementSibling?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33630527/

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