色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 獲取右兄弟節(jié)點

孫明賢1年前5瀏覽0評論

JavaScript獲取HTML文檔中的某個元素的右兄弟節(jié)點是非常常見的操作,我們可以使用JavaScript中的nextSibling屬性去獲取元素的兄弟節(jié)點,然后再通過nextSibling獲取它的右兄弟節(jié)點。

假設(shè)我們有如下的HTML文檔:

<div>
<p>第一個p標簽</p>
<p id="target">我們需要獲取的p標簽</p>
<p>第三個p標簽</p>
</div>

我們需要獲取id為“target”的p標簽的右兄弟節(jié)點。

// 通過getElementById獲取目標元素
var targetElem = document.getElementById("target");
// 通過nextSibling獲取右兄弟節(jié)點
var rightSibling = targetElem.nextSibling;
// 打印右兄弟節(jié)點的文本內(nèi)容
console.log(rightSibling.textContent);

上面的代碼中,我們先通過getElementById方法獲取了id為“target”的p標簽元素,然后使用它的nextSibling屬性獲取了它的右兄弟節(jié)點,最后通過rightSibling.textContent打印出右兄弟節(jié)點的文本內(nèi)容。

但是這段代碼有個問題,它獲取到的右兄弟節(jié)點并不是我們期望的p標簽元素,而是該元素后面的文本節(jié)點。這是因為HTML文檔解析時會將元素間的空格、回車等特殊符號解析成文本節(jié)點。

我們可以通過循環(huán)獲取下一個兄弟節(jié)點,直到找到一個元素節(jié)點為止,這樣就能排除掉文本節(jié)點的影響。

// 通過getElementById獲取目標元素
var targetElem = document.getElementById("target");
// 定義一個變量用于存儲右兄弟節(jié)點
var rightSibling = targetElem.nextSibling;
// 循環(huán)獲取下一個兄弟節(jié)點,直到找到元素節(jié)點為止
while (rightSibling.nodeType !== 1) {
rightSibling = rightSibling.nextSibling;
}
// 打印右兄弟節(jié)點的文本內(nèi)容
console.log(rightSibling.textContent);

上面的代碼中,我們先通過getElementById方法獲取了id為“target”的p標簽元素,然后使用它的nextSibling屬性獲取了它的右兄弟節(jié)點。接下來,我們使用while循環(huán)獲取下一個兄弟節(jié)點,直到找到一個元素節(jié)點為止。最后,通過rightSibling.textContent打印出右兄弟節(jié)點的文本內(nèi)容。

如果我們將HTML文檔改成如下:

<div>
<p>第一個p標簽</p>
<span>一個span標簽</span>
<p id="target">我們需要獲取的p標簽</p>
<p>第三個p標簽</p>
</div>

我們需要獲取id為“target”的p標簽的右兄弟節(jié)點。這時,上面的代碼失效了,因為我們的循環(huán)條件只判斷了元素節(jié)點(nodeType === 1)。

我們需要在循環(huán)中判斷當前節(jié)點類型是不是元素節(jié)點(nodeType === 1),如果不是則繼續(xù)獲取下一個兄弟節(jié)點,直到找到為止。

// 通過getElementById獲取目標元素
var targetElem = document.getElementById("target");
// 定義一個變量用于存儲右兄弟節(jié)點
var rightSibling = targetElem.nextSibling;
// 循環(huán)獲取下一個兄弟節(jié)點,直到找到元素節(jié)點為止
while (rightSibling && rightSibling.nodeType !== 1) {
rightSibling = rightSibling.nextSibling;
}
if (rightSibling) {
// 打印右兄弟節(jié)點的文本內(nèi)容
console.log(rightSibling.textContent);
} else {
console.log("沒有找到右兄弟節(jié)點");
}

上面的代碼中,我們先通過getElementById方法獲取了id為“target”的p標簽元素,然后使用它的nextSibling屬性獲取了它的右兄弟節(jié)點。接下來,我們使用while循環(huán)獲取下一個兄弟節(jié)點,直到找到一個元素節(jié)點為止。注意,這里我們使用了"&&"符號,如果rightSibling為false,就不會再判斷rightSibling.nodeType !== 1,避免了代碼的拋出。最后,我們判斷找到的右兄弟節(jié)點是否存在,如果存在則通過rightSibling.textContent打印出右兄弟節(jié)點的文本內(nèi)容,否則打印“沒有找到右兄弟節(jié)點”。

使用上面的這種方式,可以有效避免因為文本節(jié)點以及其他節(jié)點類型的存在而導致的獲取錯誤。