JQuery |在<ul>中找到所有“,”(逗号)并将其删除/替换为“</ul>

时间:2011-05-03 10:37:28

标签: javascript jquery

HTML

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

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

$(".tabbox").replace(',' , ''); // This was my idea, and it does not work ..

如何从&lt;中删除? ul&gt; ?

5 个答案:

答案 0 :(得分:8)

在我看来,你问的是错误的问题。

如果目的是从<li>节点之间删除虚假文本节点(恰好包含逗号),则应该这样做:

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

http://jsfiddle.net/alnitak/gN7yM/

的工作演示

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

如果您想要清除代码以从<li>中删除不属于<ul>任何,请使用:

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

FWIW,因为@ShadowWizard报告说这不适用于IE&lt; 8.0我试过了:

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

并且没有工作。阅读jQuery源代码似乎纯粹的字符串选择器完全忽略文本节点,但 工作:

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

编辑我更改了上面的几个示例,使用.not()代替.filter(),以便删除双重否定。

答案 1 :(得分:4)

清理列表并仅保留列表项的一种方法是这样的代码:

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

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

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

答案 2 :(得分:3)

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

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

这将取代所有这些。

编辑:

虽然,为什么你会在每个li之后有一个','?

答案 3 :(得分:2)

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

答案 4 :(得分:0)

我的示例使用function parameter for .html()

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

jsFiddle Demo