【问题标题】:Remove li tags using javascript array使用 javascript 数组删除 li 标签
【发布时间】:2011-10-27 04:47:49
【问题描述】:

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

数组:

var mygroups=["1","8","3","4","5"]

示例(输入):

<li><div>1 element.</div></li>
<li><div>2 element. This is my <span>post</span> into new group</div></li>
<li><div>3 element. Another one</li>
<li><div>
         <a href="javascript:void(0);">Actor</a>
         <a href="/groups/viewgroup/1-first-group">First group</a>
    </div>
</li>
<li><div><a href="javascript:void(0);">Actor</a>
         <a href="/groups/viewgroup/10-ten-group">Ten group</a>5 element. This is my <span>new post</span></div></li>
<li>
   <div>6 element. <a href="/j1.5/index.php/jomsocial/63-zzz/profile">Actor</a></div>
   <div><a href="/groups/viewgroup/test/5-second-group">Group other</a></div>
</li>
<li>7 element.</li>
<li><div><a href="/groups/viewgroup/test/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="/j1.5/index.php?option=com_community&view=groups&task=viewgroup&groupid=1&Itemid=4">My other group </a></div></li>

如何获取此输出(删除锚点数组中不包含组的所有实例):

<li><div>
         <a href="javascript:void(0);">Actor</a>
         <a href="/groups/viewgroup/1-first-group">First group</a>
    </div>
</li>
<li>
   <div>6 element. <a href="/j1.5/index.php/jomsocial/63-zzz/profile">Actor</a></div>
   <div><a href="/groups/viewgroup/test/5-second-group">Group other</a></div>
</li>
<li><div><a href="/groups/viewgroup/test/8-second-group">First group</a></div></li>
<li><div><a href="/j1.5/index.php?option=com_community&view=groups&task=viewgroup&groupid=4&Itemid=4">My other group </a></div></li>

此代码无法正常工作:

    $('li').filter(function() {
    var a = $(this).find('a');
    if (!a.length)
        return true;

    var text = a.attr('href').split('/')[3];
    text = text.substring(0, text.indexOf('-'));
    if ($.inArray(text , mygroups) >= 0)
        return false;

    return true;
}).remove();

而这个也不行:

 $('li').filter(function() {
    if($(this).is('*:has(a[href|=/group/viewgroup/])') {
        var href = $(this).find('a').attr('href'),
            trail = href.split('/')[3],
            number = + /(\d+)-/.exec(trail)[1];
        return $.inArray(myarray, +number) == -1;
    }
    return true;
}).remove();

【问题讨论】:

    标签: jquery html jquery-selectors html-lists


    【解决方案1】:

    这似乎可以满足您的需求。虽然它不是世界上最整洁的代码:

    $('li').filter(function() {
        var a = $(this).find('a');
        if (!a.length)
            return true;
    
        var text = /(\d+)-/.exec(a.attr('href'))[1];  
        if ($.inArray(text , mygroups) >= 0)
            return false;
    
        return true;
    }).remove();
    

    它获取所有的 li,然后过滤掉任何与数组匹配的值并删除剩下的。

    http://jsfiddle.net/8AmNR/5/

    【讨论】:

    • IMO,OP中的代码需要重新考虑;将spans 与类或其他东西一起使用会更容易(并且更快一点),尽管当前的实现确实有效。
    • 请再次检查我的详细信息。它找不到第二个“A”标签。
    【解决方案2】:

    如何使用过滤功能。

    在这种情况下,您选择所有li 并过滤掉所需的。

    $('li').filter(function(index){
        if(/*condition applied*/){
            ....
        }
    });
    

    【讨论】:

    • 由于您实际上并没有进行过滤,因此您应该在此处使用each 以使代码更易于理解。
    【解决方案3】:
    $('li').filter(function() {
        if($(this).is('*:has(a[href|=/group/viewgroup/])') {
            var href = $(this).find('a').attr('href'),
                trail = href.split('/')[3],
                number = + /(\d+)-/.exec(trail)[1];
            return $.inArray(myarray, +number) == -1;
        }
        return true;
    }).remove();
    

    【讨论】:

    • 请再次检查我的详细信息。它找不到第二个“A”标签。
    【解决方案4】:

    这行得通

    $("li").each(function() {
              if($(this).find("a").size() == 0) {
                  $(this).remove();
              };
        });
    

    【讨论】:

    • 锚点的 href 属性中必须有 'group'。
    • 这只是删除了所有不包含a的li,问题表明它们应该使用数组进行过滤。
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2013-09-18
    • 2012-03-13
    相关资源
    最近更新 更多