Jquery搜索和替换w / .contains

时间:2012-05-07 20:58:30

标签: jquery

我正在尝试搜索并替换同一个单词的所有实例,使用.contains()并不区分大小写,但似乎它不起作用且区分大小写。这是我现在的代码:

<p>some text</p>
<p>Some Text</p>
<p>Some TEXT</p>


jQuery.expr[':'].Contains = function(a, i, m) {
         return jQuery(a).text().toUpperCase()
             .indexOf(m[3].toUpperCase()) >= 0;
       };
       jQuery.expr[':'].contains = function(a, i, m) {
         return jQuery(a).text().toUpperCase()
             .indexOf(m[3].toUpperCase()) >= 0;
       };


        $('p').filter(":contains('some text')").each(function(){
            $(this).text($(this).text().replace("some text", "replace with new text"));
        });

由于相同的情况,这只会更改第一个文本 你可以在这里查看js小提琴上的例子 http://jsfiddle.net/ka82V/

4 个答案:

答案 0 :(得分:2)

实际上'替换'是区分大小写的。改为使用正则表达式:

text().replace(/some text/i, "replace with new text"));

DEMO http://jsfiddle.net/ka82V/1/

答案 1 :(得分:2)

你看起来很好看。请尝试使用以下内容,因为使用.filter的目的是链接

DEMO

jQuery.expr[':'].containsCI = function(a, i, m) {
    return jQuery(a)
        .text()
        .toUpperCase()
        .indexOf(m[3].toUpperCase()) >= 0;
};

$('p').filter(":containsCI('some text')").text(function() {
    return $(this).text().replace(/some text/i, "replace with new text");
});

答案 2 :(得分:1)

问题不在于原始匹配,而在于您如何替换。即使 匹配,替换也没有做任何事情,因为它的“some text”参数与其他案例变体不匹配。

但是,我不认为像这样覆盖jQuery的:contains选择器是个好主意。使用基于函数的过滤器代码更少,并且jQuery也不会改变。

请参阅以下工作示例:http://jsfiddle.net/Y6bhS/1/

$('p').filter(function() {
    return /some text/i.test( $(this).text() );
}).each(function(){
    $(this).text($(this).text().replace(/some text/i, "replace with new text"));
});

答案 3 :(得分:1)

jQuery.expr[':'].Contains = function(a, i, m) {
    return new RegExp(m[3], 'ig').test(jQuery(a).text());  // case insensitive replace
};
jQuery.expr[':'].contains = function(a, i, m) {
    return new RegExp(m[3], 'ig').test(jQuery(a).text());  // case insensitive replace
};

$('p').filter(":contains('some text')").each(function() {
     $(this).text($(this).text().replace( new RegExp($(this).text(), 'i'),"replace with new text"));
});