Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery从字符串中替换字符的方法_Javascript_Jquery_Html - Fatal编程技术网

Javascript jQuery从字符串中替换字符的方法

Javascript jQuery从字符串中替换字符的方法,javascript,jquery,html,Javascript,Jquery,Html,我有一个生成的导航,前n个项目前面有。,始终位于列表的顶部。我现在想要完成的是从站点前端删除。 我尝试使用下面的jQuery代码来实现这一点,它几乎可以工作,但它也改变了其他导航项的文本 请参阅JS Fiddle上的完整标记: 代码: $(function() { $('.dropdown-submenu').html($('.dropdown-submenu').html().replace(/\_/g,'')); }); 您需要使选择器更具体。给它一个唯一的类或ID,然后根据它进行选择

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

我尝试使用下面的jQuery代码来实现这一点,它几乎可以工作,但它也改变了其他导航项的文本

请参阅JS Fiddle上的完整标记:

代码:

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

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

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

注意:您使用的
id
s不正确,因为它们是全局唯一的。您不应该多次使用
id=“row”
。这就是类的用途。

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

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

注意:您使用的
id
s不正确,因为它们是全局唯一的。您不应该多次使用
id=“row”
。这就是类的用途。

因此,基本上您只希望删除锚定中的下划线,这些下划线是
的直接子级。下拉子菜单
? 在小提琴中,将
$('.dropdown submenu')
替换为
$('.dropdown submenu>a')

JSFiddle:

编辑:

在你的回答之后,问题就清楚了。为了防止您的
  • 全部成为软件一体,您需要循环所有要替换的元素,如下所示:

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

    所以基本上您只想删除锚定中的下划线,这些下划线是
    的直接子菜单?
    在小提琴中,将
    $('.dropdown submenu')
    替换为
    $('.dropdown submenu>a')

    JSFiddle:

    编辑:

    在你的回答之后,问题就清楚了。为了防止您的
  • 全部成为软件一体,您需要循环所有要替换的元素,如下所示:

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

    您可以将重载与提供现有html的函数一起使用:

    $('.dropdown-submenu').html(function(index, html) { return html.replace(/\_/g,''); });
    
    更新小提琴:


    或者,您可以在每条记录上循环:

    $('.dropdown-submenu').each(function() {
       $(this).html($(this).html().replace(/\_/g,''));
    });
    
    您可以将重载与提供现有html的函数一起使用:

    $('.dropdown-submenu').html(function(index, html) { return html.replace(/\_/g,''); });
    
    更新小提琴:


    或者,您可以在每条记录上循环:

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

    您可以将其更改为在锚上循环

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

    您可以将其更改为在锚上循环

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

    简单地替换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,你可以为此编写一个小插件

    简单地替换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,你可以为此编写一个小插件

    必须使用jQuery each函数使用.dropdown子菜单类遍历每个元素,以便一次只影响一个元素。您的JavaScript代码如下所示

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

    必须使用jqueryeach函数使用.dropdown子菜单类遍历每个元素,以便一次只影响一个元素。您的JavaScript代码如下所示

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

    你需要什么?您的代码按预期工作。“其他导航项目”需要用ID或不同的类名来标识,因此您只能替换所需导航上的
    。@MarcspérezGude如果您查看输出,您将看到,“软件一”和“软件二”现在都显示为“软件一”更换后,
    软件一
    软件二
    的混合问题很容易解决。您将直接替换为jQuery生成的自动循环。如果您使用自己的循环并使用
    $(this)
    获取当前元素,问题就会消失。请参阅@Turv的答案。我投赞成票。这正是我在最后的评论中告诉你的。你需要什么?您的代码按预期工作。“其他导航项目”需要用ID或不同的类名来标识,因此您只能替换所需导航上的
    。@MarcspérezGude如果您查看输出,您将看到,“软件一”和“软件二”现在都显示为“软件一”更换后,
    软件一
    软件二
    的混合问题很容易解决。您将直接替换为jQuery生成的自动循环。如果您使用自己的循环并使用
    $(this)
    获取当前元素,问题就会消失。请参阅@Turv的答案。我投赞成票。这正是我在上次评论中告诉你的。明白了。但是我忘了提到我不能控制类/ID的生成。这是使用CMS am自动生成的。SparkPay是特定的。如果您只想更改单个项目,则会使用ID。在这种情况下,OP已经正确地使用一个类来选择所有相关元素。