JavaScript String .replace方法正在替换我的所有内容?

时间:2011-11-05 04:22:51

标签: javascript jquery

我已成功实现了以下列方式使用其他内容查找和替换某些文本:

$(".class").html($(".class").html().replace(/\text\b/g, '<span class="newclass newclass2">new text</span>'));

当我将它应用于我的元素'class'时,它会找到所有'text'并替换为'new text'以及与新类相关的所有内容。

但是,如果我在页面上有多个具有相同类的元素,它将使用第一个类中的任何文本替换所有类。

例如,如果我的第一个类的内容为“Hello everyone”,那么当脚本应用于此类时,它可以正常工作。然后将任何后续的同名类替换为“Hello everyone”。这些函数的应用方式与该类的第一次出现的方式相同。

IE,它应用脚本,然后在页面上的每个同名类中复制它。

我不明白为什么它会这样做,而且如果它不能用于在不设置新脚本和不同类的情况下在不同部分中更改文本,则在很多方面使该函数变得毫无意义。

希望在这里有一些简单的工作,我不知道,任何帮助将不胜感激。

非常感谢

理查德

3 个答案:

答案 0 :(得分:1)

这就是类选择器的本质 - .html(...)将替换与.class选择器匹配的所有内容的HTML。

如果要替换每个个人 .class元素中的文字,可以使用.each功能。 (也可能有jQuerier方式。)

$(`.class`).each(function(n, el) {
    var myHtml = $(this).html();
    myHtml = mungeIt(myHtml);
    $(this).html(myHtml);
});

如果您只想选择个人 .class元素,那么您(a)不是真的想要使用类,而是使用ID,或者(b)需要了解您的结构或您希望操作的上下文,以便仅选择目标DOM元素。

(并希望没有相应的代码更新,结构或上下文不会改变。)

答案 1 :(得分:0)

您正在使用jQuery选择器$(".class")指定一个类,这就是句点所指示的内容。 jQuery有很多选择器可供选择。此处的文档中提供了一个列表:http://api.jquery.com/category/selectors/

此外,我会查看http://api.jquery.com/hasClass/您的问题,因为您可以使用if ... then语句不会遇到其他人

答案 2 :(得分:0)

Dave对于需要使用.each方法是正确的。我们需要一次遍历每个元素,因为.html()只会在有多个匹配时返回第一个元素。

<强>尝试:

$('.class').each(function() {
  $(this).html($(this).html().replace(/someWord/g,'withAnother'));
});