Удалить теги li с помощью массива javascript - PullRequest
9 голосов
/ 15 августа 2011

Я ищу решение для удаления тегов <li>, отфильтрованных с использованием массива javascript.

Массив:

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();

Ответы [ 4 ]

3 голосов
/ 15 августа 2011

Кажется, это делает то, что вы хотите. Хотя это не самый аккуратный код в мире:

$('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/

1 голос
/ 15 августа 2011

Как насчет использования функции фильтра.

В этом сценарии вы выбираете все li и отфильтровываете желаемое.

$('li').filter(function(index){
    if(/*condition applied*/){
        ....
    }
});
0 голосов
/ 15 августа 2011
$('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();
0 голосов
/ 15 августа 2011

Это работает

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