replace()适用于text-node,但是replaceWith()方法没有?为什么?

时间:2013-11-27 23:58:48

标签: jquery replace replacewith

我正在尝试使用replaceWith()方法替换文本节点。我可以使用replace()方法在元素中找到一个字符串,并将其替换为我想要的任何内容,但对于replaceWith()来说似乎并非如此。

FIDDLE

为什么会这样,有没有办法呢?

var word = 'NOT work';

var sent = $('#without').html().replace(word, 'WORK'); 
$('#without').html(sent);

$("#with "+word).replaceWith('work');

2 个答案:

答案 0 :(得分:2)

.replaceWith()替换整个DOM元素。您要做的是更改单个文本节点的一些文本,该文本节点是元素的一部分。 DOM或jQuery中没有单个函数可以仅更改文本节点的一部分或元素文本的一部分。您这样做的唯一方法是获取文本,进行所需的更改并将其重新设置。

你可以创建自己的jQuery方法来做到这一点。

$.fn.replaceText = function(srcText, replacementText) {
    return this.each(function() {
        var item = $(this);
        var txt = item.text();
        item.text(txt.replace(srcText, replacementText));
    });
}

工作演示:http://jsfiddle.net/jfriend00/U8k8C/

答案 1 :(得分:0)

使用.replaceWith().text('mystring')

而不是替换DOM元素的.html('my string that may have <abbr>HTML</abbr> in it') 编辑 - 我想我误解了你想要做的事情。看起来你只是想用HTML包装一段文本。您最好的选择是使用您在评论中提到的.replace()功能。