尝试.replace()没有成功

时间:2011-07-26 16:56:00

标签: javascript jquery string

我有一些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,

4 个答案:

答案 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,""));