javascript - JSDOM:删除曾经嵌套的块引用,但留下 2+ 嵌套块引用
问题描述
我正在尝试使用 Node.JS 中的 JSDOM 编辑一些 HTML。我希望删除最多一个周围<blockquote>
的孩子。但我希望保留两个或多个 s 内的任何标签。我已经阅读了这个问题,但我仍然感到困惑。您可以看到我在这个JSFiddle中尝试过的内容。这是原始的 HTML:<div>
<blockquote>
<div>
<html>
<div id="div1">
<blockquote>Text 1</blockquote>
</div>
<div id="div2">
<div id="div3">
<blockquote>Text 2</blockquote>
<div id="div4">
<blockquote>Text 3</blockquote>
</div>
</div>
</div>
<span onclick="removeblockquotes(this)">Change</span>
</html>
应该变成
<html>
<div id="div1">
Text 1
</div>
<div id="div2">
<div id="div3">
<blockquote>Text 2</blockquote>
<div id="div4">
<blockquote>Text 3</blockquote>
</div>
</div>
</div>
</html>
这是我到目前为止尝试过的功能,但它不起作用(没有任何块引用发生变化):
function removeblockquotes(e)
{
var x = document.querySelectorAll("blockquote");
x.forEach(y=>{
if (y.parentNode.parentNode==null){
y.parentNode.appendChild(x.innerHTML);
y.parentNode.removeChild(x);
};
});
}
解决方案
只需将两个.closest
调用链接到每个 blockquote 以查看周围是否有多个 div:
for (const b of document.querySelectorAll('blockquote')) {
if (!b.closest('div')?.parentElement.closest('div')) {
b.replaceWith(b.textContent);
}
}
console.log(document.body.innerHTML);
<div id="div1">
<blockquote>Text 1</blockquote>
</div>
<div id="div2">
<div id="div3">
<blockquote>Text 2</blockquote>
<div id="div4">
<blockquote>Text 3</blockquote>
</div>
</div>
</div>
(你需要一个.parentElement
,因为如果它匹配.closest
将返回它被调用的元素)
推荐阅读
- angular - 如何使用离子加载事件“ionLoadingWillPresent”?
- javascript - 如何解决这个甜蜜警报的问题?
- java - 在 Android 上使用 Java 打开 PNG 文件、编辑透明度 (Alpha) 和保存
- java - 如何通过使用 Android Studio 单击小部件来调用 Mainactivity 中的方法?
- javascript - 如何使用 javascript 在 asp.net core mvc 中播放音轨?
- angularjs - 连接到 Hyperledger UI 应用程序中的相应卡
- python - 如何找到给定一个点和一条具有两点的线的垂线的脚
- angular - 如何使用 ionic 4 BluetoothLE 插件连接蓝牙?
- android - 在 Android Studio IDE 中使用 Firebase 实时数据库的 Android 应用程序崩溃
- python - 在 django 中再次调用 API 数据的分页