试图替换(),但没有成功

Trying to .replace() Without Success

本文关键字:成功 替换      更新时间:2023-09-26

我有一些像这样的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,

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);
  });

这会帮你完成任务:
你把代码分成了太多的行,而且你需要对每个单独的元素分别运行replace。

$(".lstItem").each(function() {
   $(this).html(
       $(this).html().replace(/'[(.*)']/, "")
   );
});

参见jsFiddle中的示例:http://jsfiddle.net/eKn3Q/7/

与jimbojw的答案一起,$(".lstItem").text()将检索<a/>元素中的所有文本。处理此问题的一种方法是将function(i,t){}传递给.text()方法。

$(".lstItem").text(function(i, text){
    var match = text.match(/'[(.*?)']/);
    return text.replace(match[0], "");    
});

jsfiddle的简单示例

你的正则表达式也可以更简单。

var item = $(".lstItem").text();
var match = /'[(.*?)']/;
$(".listItem").text(item.replace(match,""));