亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除標簽名稱但保留標簽

刪除標簽名稱但保留標簽

倚天杖 2022-07-08 19:29:21
您好,我有一個<strong></strong>嵌套在段落<p></p>中的標簽,我正在嘗試刪除<strong>標簽但保留文本或值。類似于在 jquery 中展開但在 javascript 中的東西。我在一個虛擬的 HTML 頁面上嘗試了這段代碼,它工作正常<html><body>    <p>aaa <Strong>bbbbb</Strong></p>    <p>acccaa <Strong>ddddd</Strong></p>    <p>eeee <Strong>ffff</Strong></p>    <script>        var p = document.getElementsByTagName("p");        for(var i=0;i<p.length;i++){            var strongs = p[i].getElementsByTagName("strong");            for(var j=0;j<strongs.length;j++){                p[i].replaceChild(document.createTextNode(strongs[j].innerText),strongs[j]);            }        }    </script></body></html>但是,一旦我在真實頁面示例上嘗試相同的代碼:https ://www.bustle.com/privacy我收到此錯誤:在“節點”上執行“replaceChild”失?。阂鎿Q的節點不是該節點的子節點。關于如何讓它在示例或任何其他示例上工作的任何想法?
查看完整描述

2 回答

?
慕碼人8056858

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>


查看完整回答
反對 回復 2022-07-08
?
四季花海

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>


查看完整回答
反對 回復 2022-07-08
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號