我有一些HTML代码,如下所示:
<li><a href="#" class="lstItem">Testing jQuery [First Bracket]</a></li>
<li><a href="#" class="lstItem">Loving jQuery [Second one]</a></li>
我正试图用onLoad
替换括号内的内容,如下所示:
var item = $(".lstItem").text();
var match = item.match(/\[(.*?)\]/);
item = item.replace(match[0], "");
但没有任何改变。怎么了?怎么纠正这个?
在使用jimbojw的建议后,我在此特定行获得了Uncaught ReferenceError: text is not defined
:
oldtext = $item.text,
答案 0 :(得分:8)
item
是一个包含字符串的变量,而不是指向文字文本的指针。如果要更改文本,则必须再次设置,与$(".listItem").text(item)
您将遇到的下一个问题是所有文本都设置为相同的东西。所以真正想要做的事情可能是这样的:
$(".lstItem")
.each(function(index, item) {
var
$item = $(item),
oldtext = $item.text(),
match = oldtext.match(/\[(.*?)\]/),
newtext = oldtext.replace(match[0], '');
$item.text(newtext);
});
答案 1 :(得分:1)
这将为你完成这项工作:
你将代码分成太多行,也需要分别为每个单独的元素运行替换。
$(".lstItem").each(function() {
$(this).html(
$(this).html().replace(/\[(.*)\]/, "")
);
});
在jsFiddle中查看您的示例:http://jsfiddle.net/eKn3Q/7/
答案 2 :(得分:1)
与jimbojw的回答$(".lstItem").text()
一起将检索<a/>
元素内的所有文本。解决此问题的一种方法是将function(i,t){}
传递给.text()
方法。
$(".lstItem").text(function(i, text){
var match = text.match(/\[(.*?)\]/);
return text.replace(match[0], "");
});
<强> Simple example on jsfiddle 强>
答案 3 :(得分:0)
你的正则表达式也可以更简单。
var item = $(".lstItem").text();
var match = /\[(.*?)\]/;
$(".listItem").text(item.replace(match,""));