2012-01-09 99 views
2

我有以下HTML结构:如何使用jquery删除ul列表中的空li?

<ul> 
    <li><a>one</a></li> 
    <li><a>two</a></li> 
    <li></li> 
    <li><a>three</a></li> 
    <li><a>four</a></li> 
    <li></li> 
    <li><a>five</a></li> 
</ul> 

我需要删除li元件,其不具有任何内容(<li></li>)。

我该如何在jQuery中做到这一点?

回答

3
$('li').each(function(){ 
if($(this).html() == "" || typeof($(this).html())=="undefined") 
{ 
    $(this).remove 
} 
}) 

我会建议你在对比之前修剪HTML,这样你就不会最终计数:

<li> 
</li> 

为非空项目。 要修剪的HTML,只需经过.html()即添加.trim()

if($(this).html().trim() == "" || typeof($(this).html().trim())=="undefined") 
+2

这是我会选择过的方式,但你会介意解释原因你添加了'typeof($(this).html())==“undefined”'? – JMax 2012-01-09 10:10:20

+2

防止IE可能出现的问题。 – 2012-01-09 10:14:07

2

未经检验的,所以让我知道,如果它不为你工作。

$('li').each(function() { 
    var li = $(this); 
    if (li.html() == '') { 
     li.remove(); 
    } 
}); 
+1

'html'方法是一种方法,而不是属性。 – Guffa 2012-01-09 10:12:56

+0

@Guffa错字修正 – PeeHaa 2012-01-09 10:14:58

1
$('li').each(
     function(){ 
      if($(this).html().trim()==''){$(this).remove();} 
     } 
); 
1

可以使用filter方法来运行一个自定义函数找到的元素删除:

$('ul li').filter(function(){ return $(this).text() == '' }).remove(); 
1

尝试以下操作:

$('li').filter(function() { return !$(this).html(); }).remove(); 
1
 

$('ul li:empty').remove(); 
//OR 
$('ul li').filter(function() {return $(this).text()​​​​​​​ == '';}).remove();​