gpt4 book ai didi

Javascript:如何获取中断标签后面/前面的文本节点并用 ddb 标签包装它们?

转载 作者:行者123 更新时间:2023-12-02 20:29:59 25 4
gpt4 key购买 nike

我已经在 J​​query 中完成了这一点,但希望在 Javascript 中实现而不依赖于任何库。

$("br",document).parent().contents().each(function() {
var text = this.textContent ? this.textContent : this.innerText;
text = this.textContent.replace(/\s+/g, '')
if ( this.nodeType == 3 && text.length != 0) {
$(this).wrap('<ddb></ddb>')
}
});

最佳答案

以下代码应该执行与您的函数完全相同的操作。

<html>

<body>
Hello
<p>
Hello
<br/>
Hello 2
<br/>

<br/>
<br/>
</p>

<button onclick="wrapText()">Wrap</button>

<script type="text/javascript">
function wrapText() {
var nodeList = document.getElementsByTagName('br');
for (var i=0; i < nodeList.length; i++) {
var node = nodeList[i];
var parentNode = node.parentNode;
if (!parentNode) continue;
for (var c=0; c < parentNode.childNodes.length; c++) {
var child = parentNode.childNodes[c];
if (child.nodeType != 3) continue;

if (child.nodeValue.match(/[^\s]/) != null) {
var newElement = document.createElement("b");
newElement.innerHTML = child.nodeValue;
parentNode.insertBefore(newElement, child);
parentNode.removeChild(child);
}
}
}
}
</script>

</body>
</html>

但是,我应该指出,如果 <br/>包含在任何元素中,您只能获取该元素的子节点,因此如果它是一个简单的 <b>标签,您只会将文本节点包装在 <b> 内与 <ddb></ddb> (顺便问一下,那是什么?)。

您还遇到了一个错误,您正在分配 textnode.textContent ? node.textContent : node.innerText但下一行只是使用 node.textContent ,所以我解决了这个问题。我还更改了正则表达式以简单地匹配第一个非空白字符,如果它确实找到了一个,它就会将其包装起来。

关于Javascript:如何获取中断标签后面/前面的文本节点并用 ddb 标签包装它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328724/

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