jQuery方法从字符串替换字符

时间:2016-11-17 16:37:41

标签: javascript jquery html

我有一个生成的导航,前面的n个项目前面有_,始终位于列表顶部。我现在想要完成的是从网站的前端删除_

我尝试使用下面几乎有效的jQuery代码执行此操作,但它也会更改其他导航项的文本。

查看JS Fiddle的完整标记:https://jsfiddle.net/1fz661o4/

代码:

$(function() {
  $('.dropdown-submenu').html($('.dropdown-submenu').html().replace(/\_/g,''));
});

6 个答案:

答案 0 :(得分:3)

你可以改变它来循环锚点。

$(function() {
    $('.dropdown-submenu > a').each(function() {
        $(this).text($(this).text().replace(/\_/g, ''));
    });
});

https://jsfiddle.net/utk12jdt/1/

答案 1 :(得分:2)

所以基本上你只想删除.dropdown-submenu的直接子节点的锚点中的下划线? 在你的小提琴中,将$('.dropdown-submenu')替换为$('.dropdown-submenu > a')

JSFiddle:https://jsfiddle.net/26qLofz8/

$(function() {
      $('.dropdown-submenu > a').html($('.dropdown-submenu > a').html().replace(/\_/g,''));
});

修改

在你的回复之后,问题现在很清楚了。为了防止您的<li>成为一个软件,您需要遍历要替换的所有元素,如下所示:

$(function() {
  $('.dropdown-submenu > a').each(function(i, el) {
      $(el).html($(el).html().replace(/\_/g,''));
  });
});

的jsfiddle: https://jsfiddle.net/n7ms67k0/

答案 2 :(得分:1)

您可以使用提供现有html的函数.html()重载:

$('.dropdown-submenu').html(function(index, html) { return html.replace(/\_/g,''); });

更新了小提琴:https://jsfiddle.net/1fz661o4/2/

或者,您可以遍历每条记录:

$('.dropdown-submenu').each(function() {
   $(this).html($(this).html().replace(/\_/g,''));
});

答案 3 :(得分:1)

简单地替换HTML将删除所有事件侦听器,如果您在URL等中有下划线链接,则可能在将来导致问题。

您应该做的是,浏览元素并更改文本节点的值。我不确定如何在jQuery中可靠地执行它,但是这里是如何使用纯JavaScript DOM来实现的。

function replaceUnderscore(index, el) {
  switch (el.nodeType) {
    case 3: // text node
    el.nodeValue = el.nodeValue.replace(/_/g, '');
    break;

    case 1: // normal element
    for (var i = 0, child; child = el.childNodes[i]; i++) {
      replaceUnderscore(i, child);
    }
    break;
  }
}

要将此应用于您在jQuery中找到的元素,您只需执行

$('.class').each(replaceUnderscore);

未经测试,但我认为这应该有效。

话虽如此,您是否必须在JavaScript中执行此操作?理想情况下,这种类型应该在服务器端执行。如果它是CMS,您可以为此目的编写一个小插件。

答案 4 :(得分:0)

您需要使选择器更具体。给它一个唯一的类或ID,并根据它进行选择。

<ul class="dropdown-submenu my-custom-menu">

jQuery将改为:

$(function() {
  var menu = $('.my-custom-menu'); // save the query since we use it twice
  menu.html(menu.html().replace(/\_/g,''));
});

注意:您错误地使用了id,因为它们意味着全球唯一。你不应该多次id="row"次。那是什么课程。

答案 5 :(得分:0)

您必须使用jQuery每个函数使用.dropdown-submenu类遍历每个元素,这样您一次只能影响一个元素。您的JavaScript代码看起来像这样。

$(".dropdown-submenu").each(function() {
    //this is the current .dropdown-submenu element
    $(this).html($(this).html().replace(/\_/g,''));
});