gpt4 book ai didi

javascript - 纯 JavaScript - 编辑 DOM 元素中的文本而不触及子元素

转载 作者:行者123 更新时间:2023-12-03 03:07:45 24 4
gpt4 key购买 nike

我当前正在尝试编辑单个父元素的所有子元素的文本。其结构大致如下:

<section id=emoji>
<h1>Emojies</h1>
<p id=ea1>:-)</p>
<p id=ea2>(TM)</p>
<p id=ea3>Trademark(TM) <span>:-</span>)</p>
<p id=ea4>Do you &lt;3 me?</p>
<p id=ea5>:-):-):-)&lt;3&lt;3&lt;3</p>
</section>

正如您所看到的,第三个段落标签有一个span标签。我有一个函数,它将接受给定的字符串并将表情符号的所有实例转换为 emojify 函数中指定的表情符号。我想动态地对部分中的这些元素执行相同的操作。问题是我不想编辑 span,目前,合并 span 标签将生成一个笑脸,这是我不想做的.

我的表情符号功能如下所示:

function emojify(str) {
let emojies = [];
emojies['(TM)'] = '™️';
emojies['<3'] = '❤️';
emojies[':-)'] = '😀';

emojies.forEach(function(el) {
if (str.indexOf(el) > -1) {
str = str.split(el).join(emojies[el]);
}
});

return str;
}

这是我当前尝试动态执行此操作的函数:

function pageEmojify(selector) {
let element = document.querySelector(selector);
element.childNodes.forEach(function(el) {
el.textContent = emojify(el.textContent);
});
}

它有效,我只是需要它在任何转化中不包含 span 标记。

我在 StackOverflow 上查看了各种问题,但似乎都使用了 jQuery,我不想用它来解决这个特定问题。

例如:How to only change the text in a DOM element without replacing any child elements

如何编辑我的 pageEmojify 函数来执行此操作?

最佳答案

function emojify(str) {
let emojies = [];
emojies['(TM)'] = '™️';
emojies['<3'] = '❤️';
emojies[':-)'] = '😀';

for (let el of Object.keys(emojies)) {
if (str && str.indexOf(el) > -1) {
str = str.split(el).join(emojies[el]);
}
}
return str;
}

function pageEmojify(selector) {
let element = document.querySelector(selector);
element.childNodes.forEach(function(el) {
if (el.childNodes) {
el.childNodes.forEach(function(elm) {
elm.nodeValue = emojify(elm.nodeValue)
})
} else el.textContent = emojify(el.textContent);
});
}
pageEmojify('section');
<section id='emoji'>
<h1>Emojies</h1>
<p id='ea1'>:-)</p>
<p id='ea2'>(TM)</p>
<p id='ea3'>Trademark(TM) <span>:-</span>)<span>:-</span>)</p>
<p id='ea4'>Do you &lt;3 me?</p>
<p id='ea5'>:-):-):-)&lt;3&lt;3&lt;3</p>
</section>

检查节点的 nodeValue 以获取给定元素的值。如果有任何其他节点,则循环遍历该数组以获取所有其他节点内容。

关于javascript - 纯 JavaScript - 编辑 DOM 元素中的文本而不触及子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094828/

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