【问题标题】:jQuery | Remove li tagsjQuery |删除 li 标签
【发布时间】:2011-10-27 03:53:15
【问题描述】:

我正在寻找一种解决方案来删除使用 javascript 数组过滤的 <li> 标记。

var 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>

谢谢!

【问题讨论】:

标签: jquery html jquery-selectors html-lists


【解决方案1】:

真的应该引入某种标志(例如类名或一些data- 属性)来识别您不必显示的&lt;li&gt; 节点。这样的详细检查需要扫描每个&lt;li&gt; 的整个HTML,这不是一个好的做法。但是,它可能看起来像这样:

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

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

【讨论】:

  • 感谢function(_, node),我以前从未见过
  • 谢谢!我的任务有一些小的变化。请检查。
【解决方案2】:

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

还更新了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 中更容易。如果您使用它,请在此处给我留言,我会在那里回复您的问题。

【讨论】:

  • 谢谢!我的任务有一些小的变化。请检查。
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 2019-01-24
  • 2012-01-05
  • 1970-01-01
  • 2016-08-15
  • 2013-03-13
  • 1970-01-01
相关资源
最近更新 更多