Javascript 如何仅替换元素上的文本内容?
我的结构如下:Javascript 如何仅替换元素上的文本内容?,javascript,text,nodes,Javascript,Text,Nodes,我的结构如下: <li> <a><i>...</i>Some Text Here!</a> <input> <a></a> </li> …这里有一些文字! 我只想在这里更改字符串一些文本不影响(删除或更改)任何其他内容,即其所有子节点 显然,textContent,如果设置,将删除所有子元素。其他类似的方法似乎也在做同样的事情。我已经搜索了一段时间,但似乎没
<li>
<a><i>...</i>Some Text Here!</a>
<input>
<a></a>
</li>
…这里有一些文字!
我只想在这里更改字符串一些文本元素li
下的code>不影响(删除或更改)任何其他内容,即其所有子节点
显然,textContent
,如果设置,将删除所有子元素。其他类似的方法似乎也在做同样的事情。我已经搜索了一段时间,但似乎没有解决办法
如果有帮助的话,我可以将类或ID设置为您在结构中看到的任何元素。假设您在变量锚定中已经有
标记:
anchor.lastChild.textContent = 'My text';
请看下面的示例:
var-anchor=document.querySelector('a');
anchor.lastChild.textContent='其他文本'代码>
拉拉…这里有一些文字!
你不能。更正
但是,为了清洁起见,您应该将文本包装在一个span中,然后替换span中的内容。它更容易阅读,就像这样:
HTML
<li>
<a><i>...</i><span class="replace-me">Some text here!</span></a>
</li>
使用Element.childNodes
,它覆盖文本节点和元素,并替换它们的textContent
:
document.getElementsByTagName('a')[0].childNodes[1].textContent='Something else';
这显然取决于标签的数量、标签之间是否有空格、要替换的文本等
演示:
document.getElementsByTagName('p')[0]。childNodes[1]。textContent='Something other'代码>
我是一个元素。这里有一些文字
您还可以获取元素内容,并将每个节点类型检查为文本节点
Jquery版本:
$('a').contents().filter(function () {
return this.nodeType === Node.TEXT_NODE;
})
.each(function () {
this.nodeValue = 'Something else';
});
Javascript版本:
var nodes = document.getElementsByTagName('a')[0].childNodes;
for (var i in nodes){
if (nodes[i].nodeType === Node.TEXT_NODE)
nodes[i].nodeValue = 'Something else';
}
将该文本包装在
标记中并使用它。您不能
。。。是的,你可以。他的问题甚至没有jQuery
标记。没关系。如果他没有标记它,答案就不应该使用它。好吧,你必须接受它。还假设OP可以控制标记。。。通常情况下,也不会删除标记。没有jquery也可以这样做,只是为了显示想法。是的,我同意jquery可能不会被使用,但正如我在本例中所说的,它只是一种显示想法的较短方式
var nodes = document.getElementsByTagName('a')[0].childNodes;
for (var i in nodes){
if (nodes[i].nodeType === Node.TEXT_NODE)
nodes[i].nodeValue = 'Something else';
}