我有一个生成的导航,前面的n个项目前面有_
,始终位于列表顶部。我现在想要完成的是从网站的前端删除_
。
我尝试使用下面几乎有效的jQuery代码执行此操作,但它也会更改其他导航项的文本。
查看JS Fiddle的完整标记:https://jsfiddle.net/1fz661o4/
代码:
$(function() {
$('.dropdown-submenu').html($('.dropdown-submenu').html().replace(/\_/g,''));
});
答案 0 :(得分:3)
你可以改变它来循环锚点。
$(function() {
$('.dropdown-submenu > a').each(function() {
$(this).text($(this).text().replace(/\_/g, ''));
});
});
答案 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,''));
});