6

我有一个具有以下结构的文档:

<div id="notice" class="box generalbox">
<p>
This is some text.
</p>
</div>

我想使用 jQuery 将单词“some”替换为单词“My”。

我该怎么做呢?

我试过了:

$("#notice").text().replace("some", "My");

但这没有用...

更新:感谢您的所有回复。我使用这个解决方案来让它工作:

$("#notice p").text($("#notice p").text().replace("some", "My"));
4

8 回答 8

11

您需要将p标签定位在#notice:

$("#notice p").text(function(i, text) {
    return text.replace("some", "My");
});

更新 2020-03

现在可以通过使用箭头函数使同样的逻辑变得更加简单:

$('#notice p').text((i, t) => t.replace('some', 'My'));

这适用于除 Internet Explorer 之外的任何浏览器。

于 2013-10-11T13:06:07.593 回答
9

阅读http://api.jquery.com/text/#text-functionindex--text

$("#notice p").text(function (_, ctx) {
    return ctx.replace("some", "My");
});

或者

$("#notice p").text($("#notice p").text().replace("some", "My"));

或者

var  p_tag = $("#notice p");
p_tag.text(p_tag.text().replace("some", "My"));
于 2013-10-11T13:04:53.850 回答
5

这是一个矫枉过正,但无论如何:

function replaceNodeText() {
    if (this.nodeType === 3) {
        this.nodeValue = this.nodeValue.replace(replaceNodeText.find, replaceNodeText.replace);
    } else {
        $(this).contents().each(replaceNodeText);
    }
}
replaceNodeText.find = "some";
replaceNodeText.replace = "my";
$("#notice").contents().each(replaceNodeText);

此函数将保留指定元素中存在的任何 html。例如,它将适用于以下 HTML:

<div id="notice" class="box generalbox">
    <p>This is<br>some text.</p>
    <p>This is so<br>me text.</p>
    <p>This is <b>some</b> text.</p>
</div>

并产生以下输出:

<div id="notice" class="box generalbox">
    <p>This is<br>my text.</p>
    <p>This is so<br>me text.</p>
    <p>This is <b>my</b> text.</p>
</div>

演示在这里

于 2013-10-11T13:07:25.080 回答
2
var text = $("#notice p").text()
text = text.replace("some", "My");
$("#notice p").text(text);
于 2013-10-11T13:06:46.460 回答
2

试试这个,确保你会得到你的结果。

$("#notice p").text(function(i, text) {
    return text.replace("some", "My");
});
于 2015-02-11T10:28:39.687 回答
1

试试这个解决方案:

newtext = $("#notice p").text().replace("some", "My"); 
$("#notice p").text(newtext);
于 2013-10-11T13:10:22.863 回答
0

尝试这个

$('#notice').html().replace("some", "my");
于 2013-10-11T13:10:13.543 回答
0

Salmans 的回答效果很好,但如果段落中的单词超过 1 个,则不会被替换。所以改用这个:(使用全局匹配的正则表达式)

function replaceNodeText() {
    if (this.nodeType === 3) {
        this.nodeValue = this.nodeValue.replace(replaceNodeText.regex, replaceNodeText.replace);
    } else {
        $(this).contents().each(replaceNodeText);
    }
}
replaceNodeText.regex = /some/g;
replaceNodeText.replace = "my";
$("#notice").contents().each(replaceNodeText);

或者使用这个:

(我刚刚将 .replace(x,y) 更改为 .split(x).join(y),这比 replace() 快得多,请参见此处

function replaceNodeText() {
    if (this.nodeType === 3) {
        this.nodeValue = this.nodeValue.split(replaceNodeText.find).join(replaceNodeText.replace);
    } else {
        $(this).contents().each(replaceNodeText);
    }
}
replaceNodeText.find = "some";
replaceNodeText.replace = "my";
$("#notice").contents().each(replaceNodeText);

jsfiddle 上的演示

于 2015-02-10T12:44:55.627 回答