我正在尝试搜索并替换同一个单词的所有实例,使用.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/
答案 0 :(得分:2)
实际上'替换'是区分大小写的。改为使用正则表达式:
text().replace(/some text/i, "replace with new text"));
答案 1 :(得分:2)
你看起来很好看。请尝试使用以下内容,因为使用.filter
的目的是链接
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"));
});