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

Tom*_*kay 5 javascript jquery

HTML

   <ul class="tabbox">
      <li></li>
      ,
      <li></li>
      ,
      <li></li>
    </ul>
Run Code Online (Sandbox Code Playgroud)

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

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

如何从<ul>中删除?

Aln*_*tak 8

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

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

$('.tabbox').contents().filter(function() {
    return (this.nodeType === 3);
}).remove();
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/alnitak/gN7yM/的工作演示

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

如果你想要净化代码以删除任何不是<li>来自的代码<ul>,请使用:

$('.tabbox').contents().not(function() {
    return (this instanceof HTMLLIElement);
}).remove();
Run Code Online (Sandbox Code Playgroud)

FWIW,因为@ShadowWizard报告说这不符合IE <8.0我试过:

$('.tabbox').contents().not('li').remove()
Run Code Online (Sandbox Code Playgroud)

没有工作.阅读jQuery源代码似乎纯粹的字符串选择器完全忽略了文本节点,但这确实有效:

$('.tabbox').contents().not(function() {
    return $(this).is('li');
}).remove();
Run Code Online (Sandbox Code Playgroud)

编辑我已经改变了上面的几个例子来.not()代替,.filter()以便删除双重否定.


Sha*_*ard 4

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

var list = $(".tabbox");
var items = $(".tabbox li");
list.html("");
items.each(function() {
    list.append($(this));
});
Run Code Online (Sandbox Code Playgroud)

现场测试用例:http://jsfiddle.net/TS8Sd/

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