2 回答

TA貢獻1803條經驗 獲得超6個贊
getElementsByTagName()返回一個活動的NodeList。<strong>因此,當您替換一個標簽時,以下所有元素的索引都會向下移動,并且當您在同一段落中有多個標簽時,代碼會失敗。結果,它會跳過一些標簽。
解決方案是將 轉換NodeList為數組,以便在循環時不會更改。
實際頁面中另一個不在代碼段中的問題是<strong>標簽可以嵌套在<p>. 您應該使用strongs[j].parentElement它來獲取其直接父級,而不是假設 thep[i]是父級。
var p = document.getElementsByTagName("p");
for (var i = 0; i < p.length; i++) {
var strongs = Array.from(p[i].getElementsByTagName("strong"));
for (var j = 0; j < strongs.length; j++) {
strongs[j].parentElement.replaceChild(document.createTextNode(strongs[j].innerText), strongs[j]);
}
}
<html>
<body>
<p>aaa
<Strong>bbbbb</Strong> - <strong>12345</strong></p>
<p>acccaa <span><Strong>ddddd</Strong> x</span></p>
<p>eeee
<Strong>ffff</Strong>
</p>
</body>
</html
您還可以通過使用查詢選擇器來避免嵌套循環。
var strongs = document.querySelectorAll("p strong");
strongs.forEach(strong => strong.parentElement.replaceChild(document.createTextNode(strong.innerText), strong));
<html>
<body>
<p>aaa
<Strong>bbbbb</Strong> - <strong>12345</strong></p>
<p>acccaa <span><Strong>ddddd</Strong> x</span></p>
<p>eeee
<Strong>ffff</Strong>
</p>
</body>
</html>

TA貢獻1811條經驗 獲得超5個贊
無需遍歷段落即可刪除<strong>. 簡單地移除所有“強項”就可以了。
function removeStrongs() {
let strongs = document.querySelectorAll('strong');
strongs.forEach(strong => {
strong.insertAdjacentText('afterend', strong.innerText);
strong.remove();
});
}
<h4>This is a <strong>Title</strong></h4>
<p>
Now is the time for all <strong>good</strong> men to come to the <strong>aid</strong> of the party.
</p>
<p>A <strong>quick brown</strong> fox jumps over the lazy dog.</p>
<button onclick="removeStrongs();">Remove Strongs</button>
添加回答
舉報