jquery text().replace('','') 不工作

jquery text().replace('','') not working

您好,我已经尝试了几个小时,在添加文本字符串后再次删除它。

我有一个处理手风琴的脚本,其中的文本有些冗余。所以我想在打开或关闭手风琴行时添加和删除冗余文本。

这是我的代码:

var redundantText = "text text text <a href=\"#contact\">Contact Me</a> text text text";

$('#collapse_1').on('show.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-indicator");
  $(".dropdown_collapse_1").removeClass("dropdown-collapsed");
  $("#redundant_text_wrapper").append(redundantText);
});
$('#collapse_1').on('hide.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-collapsed");
  $(".dropdown_collapse_1").removeClass("dropdown-indicator");
  $("#redundant_text_wrapper").text().replace(redundantText, '');
}); 

追加工作正常但 text().replace() 没有。因此,如果我多次打开和关闭手风琴行,它总是附加 redundantText 但从不删除它,这样 redundantText 就会变得更加冗余。

编辑: 将 'redundantText' 更改为 redundantText。还是不行

编辑2:

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,''));

也无济于事,它只会删除 link 但文本会保留

编辑 3:

$( "#redundant_text_wrapper").text(function(index, currentText) {
    return currentText.replace(redundantText,'');
}); 

也只删除 link,文本保留

改变

$( "#redundant_text_wrapper").text().replace('redundantText',''); 

收件人:

$( "#redundant_text_wrapper").text().replace(redundantText,'');

删除变量周围的引号。这样它将被视为一个变量而不是一个字符串。

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,''));

这样它会首先获取文本而不是替换它并设置它。

应该是:

$( "#redundant_text_wrapper").text( $( "#redundant_text_wrapper").text().replace('redundantText','') ) ;

或者如果您想替换所有出现的地方:

$( "#redundant_text_wrapper").text( $( "#redundant_text_wrapper").text().replace(/redundantText/g,'') ) ;

$( "#redundant_text_wrapper").text().replace('redundantText','') 只是获取文本值,替换它而不对结果做任何事情,所以具有讽刺意味的是,这一行是多余的。

此外,由于您的 redundantText 包含 html,您可能应该使用 html() 而不是 text()

如果你想操作一个元素的现有html,你应该使用html() which takes a function (there is also the same available for text()的重载)。这接收元素的当前 HTML 和 returns 新的 HTML 以设置:

$( "#redundant_text_wrapper").html(function(index, oldHtml) {
    return oldHtml.replace(redundantText,'');
});

综上所述,替换包装器的全部内容效率较低,并且可能会破坏其中元素上的现有事件处理程序等内容。我会说最好将多余的文本放入另一个元素中,例如 <span>,然后添加和删除它(或者只是显示和隐藏它):

// wrap it all in a <span> - give it a class to be sure
var redundantText = '<span class="redundant">text text text <a href=\"#contact\">Contact Me</a> text text text</span>';

$('#collapse_1').on('show.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-indicator");
  $(".dropdown_collapse_1").removeClass("dropdown-collapsed");
  $("#redundant_text_wrapper").append(redundantText);
});

$('#collapse_1').on('hide.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-collapsed");
  $(".dropdown_collapse_1").removeClass("dropdown-indicator");
  // just find the span and remove it
  $("#redundant_text_wrapper > span.redundant").remove();
});

好的,我现在尝试了不同的方法:

var redundantText = "<span id=\"redundantText_wrapper\"> text text text <a href=\"#contact\">Contact Me</a> text text text</span>";

$('#collapse_1').on('show.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-indicator");
  $(".dropdown_collapse_1").removeClass("dropdown-collapsed");
  $("#redundant_text_wrapper").after(redundantText);
});
$('#collapse_1').on('hide.bs.collapse', function() {
  $(".dropdown_collapse_1").addClass("dropdown-collapsed");
  $(".dropdown_collapse_1").removeClass("dropdown-indicator");
   $('#redundantText_wrapper').remove();
}); 

所以基本上我使用 'after' 而不是 'append' 并将文本放入带有 ID 的范围内。现在我可以使用 $('#ID').remove();在关闭选项卡时摆脱它。