在<ul>中查找所有的","(逗号)并将它们删除/替换为' '。涉及到JQuery技术。

5

HTML

   <ul class="tabbox">
      <li></li>
      ,
      <li></li>
      ,
      <li></li>
    </ul>

JQuery(我的想法-不起作用)

$(".tabbox").replace(',' , ''); // This was my idea, and it does not work ..
我该如何从 < ul > 中删除 , ? (即:如何将列表中的逗号去除?)

所有逗号是否都在</li>标签之后? - xkeshav
注意:添加赏金是为了承认Alnitak的出色答案,我认为他完美地回答了问题。如果您有更好的建议,请随时分享,但这不是我的赏金目的。 - Shadow The Spring Wizard
5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9

我认为你问错了问题。

如果意图是从 <li> 节点之间删除包含逗号的虚假文本节点,你应该这样做:

$('.tabbox').contents().filter(function() {
    return (this.nodeType === 3);
}).remove();

http://jsfiddle.net/alnitak/gN7yM/上有一个工作演示。

请注意使用.contents()来确保文本节点包含在结果中。

如果您想要净化代码以删除除<ul>中的任何内容以外的所有内容,请使用以下内容:

$('.tabbox').contents().not(function() {
    return (this instanceof HTMLLIElement);
}).remove();

值得一提的是,由于@ShadowWizard报告称此方法不适用于IE < 8.0,因此我尝试了:

$('.tabbox').contents().not('li').remove()

没有起作用。阅读jQuery源码,似乎纯字符串选择器完全忽略文本节点,但是这个可以工作:

$('.tabbox').contents().not(function() {
    return $(this).is('li');
}).remove();

编辑 我已经修改了上面的一些例子,使用.not()代替.filter(),以避免双重否定。


+1 对于正确的方法(永远不要停止学习! :)),但是对于这种情况怎么办? - Shadow The Spring Wizard
然后将过滤器测试更改为 return !(this instanceof HTMLLIElement); - 请参见 http://jsfiddle.net/alnitak/gN7yM/3/。 - Alnitak
很好,不过它只支持IE 8及以上版本。(仍有5%的用户使用IE7,所以值得一提:)) - Shadow The Spring Wizard
或者 !($(this).is('li')) 用于不兼容的浏览器...;-) - Alnitak
谢谢 - 我看到你发布赏金时的上涨,但是我从未看到过元帖,顺便说一下。 - Alnitak
显示剩余3条评论

4

清除列表并仅保留列表项的一种方法是使用以下代码:

var list = $(".tabbox");
var items = $(".tabbox li");
list.html("");
items.each(function() {
    list.append($(this));
});

实时测试案例:http://jsfiddle.net/TS8Sd/

这不仅会删除逗号,还会删除任何不属于该位置的其他文本或元素。


如果我还有投票的机会,我会点赞的。不过用 var items = $("li", list); 会更好。 - kapa
谢谢@baz,我还不熟悉这种语法-有什么优势吗? - Shadow The Spring Wizard
1
可以清除那些节点而无需重建<ul> - 请参见我的答案。 - Alnitak
@Shadow 这样会更快,因为它只搜索在 list 中包含的元素。请参见上下文 - kapa

3
var tabbox = $(".tabbox"),
    tabHtml = tabbox.html();

tabbox.html(tabHtml.replace(/,/g , ''));

这将替换它们所有。

编辑:

虽然,为什么每个li后面都要有一个“,”?


不必两次使用 '.tabbox' 选择器,你可以将其保存在一个变量中。 - kapa
1
服务器端语言有时会产生“噪音”,因此在客户端而不是服务器端删除这种噪音可能更容易。我想这就是这种情况。 - Shadow The Spring Wizard
我注意到@Gaurav的答案几乎正确,所以我直接使用了他的。我现在会进行修改。谢谢! - Tomgrohl

2
var tabHtml = $(".tabbox").html();
$(".tabbox").html(tabHtml.replace(/,/g , ''));  //@Tomgrohl already answered it

这确实可以工作,但是它只能删除一个逗号,最后一个逗号不会被移除。 - Tomkay

0

我的例子使用了{{link1:.html()函数参数}}。

$('.tabbox').html(function (index, oldhtml) {
    return oldhtml.replace(/,/g, '');    
});

jsFiddle演示


使用 text 会“破坏”列表,尝试将文本添加到项目中并查看发生了什么。 - Shadow The Spring Wizard
@Shadow 哦,没错,谢谢。我已经修正了我的回答。你可以取消踩的操作 :)。 - kapa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,