我想替换以下innerHTML div上的g
个字符:
<div id="myDiv">aaa>aga</div>
我用过
var myDiv = document.getElementById('myDiv');
myDiv.innerHTML = myDiv.innerHTML.replace('g','a');
不幸的是,这会将>
字符替换为&at;
如何避免此行为?
答案 0 :(得分:5)
尝试使用.innerText
代替.innerHTML
,如此
var myDiv = document.getElementById('myDiv');
var text = myDiv.innerText || myDiv.textContent || '';
myDiv.innerHTML = text.replace(/g/g, 'a');
// or without variable
// myDiv.innerHTML = (myDiv.innerText || myDiv.textContent || '').replace(/g/g, 'a');
<div id="myDiv">aaa>aga</div>
答案 1 :(得分:3)
如果你想要更加安全(当处理包含其他元素的元素,或者你不希望被解释为HTML的文本时),你会想要遍历元素。孩子们在里面找到Text节点。
Text节点内的简单替换将为您提供所需的内容:
function replaceIn(el, pattern, replacement) {
if (el.nodeType == 3) { // TEXT_NODE
el.nodeValue = el.nodeValue.replace(pattern, replacement);
}
else {
var n = el.childNodes.length;
for (var i = 0; i < n; ++i)
replaceIn(el.childNodes[i], pattern, replacement);
}
}
replaceIn(document.getElementById('foo'), /two/g, 'dos');
&#13;
<div id="foo">
<p>one</p>
<p><em>two</em>
</p>
one two <em>three</em> four two two three four
</div>
&#13;