jQuery |删除li标签

问题描述:

我正在寻找解决方案以删除使用javascript数组过滤的<li>标签。jQuery |删除li标签

变种mygroups = [ “1”, “8”, “3”, “4”, “5”]

实施例(输入):

<li><div>1 element. Bla bla bla</div></li> 
<li><div>2 element. Bla bla bla. This is my <span>post</span> into new group</div></li> 
<li><div>3 element. Bla bla bla. Another one</li> 
<li><div><a href="/groups/viewgroup/1-first-group">First group</a></div></li> 
<li><div>5 element. Bla bla bla. This is my <span>new post</span></div></li> 
<li><div>6 element. <img alt="groups.wall" class="newsfeed-icon" src="/assets/favicon/default.png"></div></li> 
<li>7 element.</li> 
<li><div><a href="/groups/viewgroup/8-second-group">First group</a></div></li> 
<li><div><a href="/groups/viewgroup/16-other-group">First group</a></div></li> 
<li><div><a href="/groups/viewgroup/5-tttt-group">First group</a></div></li> 

如何获得这个输出(删除所有不包含mygroups的实例):

<li><div><a href="/groups/viewgroup/1-first-group">First group</a></div></li> 
<li><div><a href="/groups/viewgroup/8-second-group">First group</a></div></li> 
<li><div><a href="/groups/viewgroup/5-tttt-group">First group</a></div></li> 

谢谢!

+0

可能重复[删除李标签2](http://stackoverflow.com/questions/7064012/remove-li-tags-2 ) – NGLN

编辑:更新以符合您的新要求。

更新了jsFiddle示例。

我用jQuery的代码是:

$(function() { 
    var mygroups = ["1", "8", "3", "4", "5"]; 
    $('li').each(function() { 
     var $li = $(this); 
     // if you only want li's with an <a> link to a group page which matches one 
     // in your mygroups list... 
     var $a = $li.find('a[href^="/groups/viewgroup/"]'); 
     // if we find a matching <a> (whose href attribute starts with "/groups/viewgroup/") 
     if ($a.length) { 
      // extract this <a>'s group number using a regular expression 
      var groupNum = $a.attr('href').replace(/^\/groups\/viewgroup\/(\d+)-.+$/gi, '$1'); 
      // remove the <li> if group number is not in our allowed array 
      if ($.inArray(groupNum, mygroups) == -1) $li.remove(); 
     } else { 
      $li.remove(); // no <a> found, so remove this <li> 
     } 
    }); 
}); 

我试图评论这说明大部分线路,让我知道如果有什么是没有意义的。您可以使用此ChopApp page来点击行,并且比在StackOverflow中可以更轻松地添加注释/问题。如果你使用这个,请在​​这里留下评论,我会在那里回答你的问题。

+0

谢谢!我的任务有小的变化。请检查。 – user889349

真的应引入某种标志(例如一个类名或部分data-属性),以确定你没有显示<li>节点。这样一个详细的检查需要扫描每个<li>的整个HTML,这不是一个好的做法。但是,它可能看起来像这样:

$('li').each(function(_, node) { 
    if(!/group|groups/.test(node.innerHTML)) 
     $(node).remove(); 
}); 

演示:http://jsfiddle.net/zkprg/

+0

感谢'功能(_,节点)',我从来没有看到它 –

+0

谢谢!我的任务有小的变化。请检查。 – user889349