我正在使用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>
更换不起作用。
我该怎么办?
答案 0 :(得分:1)
当对页面的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"
等单独的文本流。
答案 1 :(得分:1)
因此,您希望将文本的子集替换为另一个文本子集,并且希望跨节点工作。
看起来你想要一个Range。
因此,您只需使用Range
制作新的document.createRange()
即可。指出你的内容开始的位置。
所以只需以某种方式找到起始节点和起始偏移量,然后调用range.setStart(node, offset)
。我认为node
将是你的容器,并且只是计算了偏移量。
然后调用range.extractContents()
从DOM中删除原始文本。
然后只需range.insertNode(textNode)
将下一个文本插入DOM。