我正在使用jquery replaceText plugin。使用这个插件,我可以成功地替换元素的文本,如下所示:
<div>some text to be replaced here.</div>
<script type="text/javascript">
$(function(){
$("div").replaceText("some text to be replaced here", "a new text for replacement");
})
</script>但是,当div变成这样时:
<div>some text to be <a href="somelink">replaced</a> here.</div>更换不起作用。
我该如何继续呢?
发布于 2011-10-30 22:07:30
当操作页面的HTML时,所有的标签都在HTML流中,所以您不能只直接替换文本,而不允许中间的标签。
它与"some text to be replaced here"不匹配,因为该文本字符串不是作为单个文本字符串存在于此HTML中:
div>some text to be <a href="somelink">replaced</a> here.</div>您必须替换实际作为单独的文本流存在的单独的文本片段,如"some text to be "和"replaced"。
发布于 2011-10-30 22:25:39
因此,您希望用文本的另一个子集替换文本的子集,并且希望跨节点工作。
看起来你想要个Range。
所以你只需要使用document.createRange()创建一个新的Range。让它指向你的内容开始的地方。
所以只要找到开始节点和开始偏移量,然后调用range.setStart(node, offset)。我假设node将是您的容器,而偏移量只是计算出来的。
然后调用range.extractContents()从DOM中删除原始文本。
然后使用range.insertNode(textNode)将下一个文本插入到DOM中。
https://stackoverflow.com/questions/7944577
复制相似问题