这是html:
<div id="div001">
This is ${Row.1}.
<p>${Row.2} explain something else.</p>
<p>${Row.3} welcome you. <span>${Hello.World}, this is a new world.</span></p>
</div>
我想做的是替换文本Row 1
的${Row.1}
,而不替换整个div001
DIV。因为这会破坏<p>
和<span>
上的事件。
我目前能够实现遍历所有元素并找到子节点(其中没有html标签),在这种情况下是第一个<p>
&<span>
,并将单词替换为JQUERY $(ele).text()
。
但我仍然找不到替换${Row.1}和${Row.3}的方法。
请告诉我,谢谢。
您可以创建一个递归函数,该函数遍历所有子节点,如果它们是文本节点,则替换其文本 - 如果它们是元素节点,则递归调用其上的函数:
function replaceTextNodes(elm) {
elm.childNodes.forEach((node) => {
if (node.nodeType === 3) {
// Text node:
node.textContent = node.textContent.replace(/${([^}]+)}/g, '$1');
} else if (node.nodeType === 1) {
// Element node, recurse:
replaceTextNodes(node);
}
});
}
replaceTextNodes(document.querySelector('#div001'));
<div id="div001">
This is ${Row.1}.
<p>${Row.2} explain something else.</p>
<p>${Row.3} welcome you. <span>${Hello.World}, this is a new world.</span></p>
</div>
我能想到的最简单的方法是将其包装在<span>
中。然后你可以用$('#div001 > span')
来定位它:
$('#div001 > span').text('Replaced');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div001">
<span>This is ${Row.1}.</span>
<p>${Row.2} explain something else.</p>
<p>${Row.3} welcome you. <span>${Hello.World}, this is a new world.</span></p>
</div>
如果您明确想要替换${Row.x}
组件,您可以将这些部件包装在具有关联 ID/类的 <span>
标签中,并使用它来定位它们:
$('#one, #three').text('Replaced');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div001">
This is <span id="one">${Row.1}</span>.
<p><span id="two">${Row.2}</span> explain something else.</p>
<p><span id="three">${Row.3}</span> welcome you. <span>${Hello.World}, this is a new world.</span></p>
</div>
<小时 />
如果您无法更改 HTML,最好的办法是使用正则表达式。
以下正则表达式将替换格式${...}
中的任何内容:
var element = document.getElementById('div001');
var result = element.innerHTML.replace(/${S+}/gm, "REPLACED");
element.innerHTML = result;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div001">
This is ${Row.1}.
<p>${Row.2} explain something else.</p>
<p>${Row.3} welcome you. <span>${Hello.World}, this is a new world.</span></p>
</div>