2011-08-15 2 views
9

<li> 태그를 자바 스크립트 배열을 사용하여 필터링하여 제거하는 방법을 찾고 있습니다.자바 스크립트 배열을 사용하여 li 태그를 제거하십시오

배열 :

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

예 (입력) :

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

답변

1

어떻게 필터 기능을 사용하는 방법에 대한.

이 시나리오에서는 모두 li을 선택하고 원하는 것을 필터링합니다.

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

당신이 실제로 필터링하지 않을 때, 당신이 사용한다 '코드가 더 이해하기 위해 여기 each'. –

0

이이 당신이 원하는 것을 할 것 같다

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

앵커는 href 속성에 'group'이 있어야합니다. –

+0

이것은 테이크가 포함되지 않은 모든 li을 삭제합니다. 질문은 배열을 사용하여 필터링해야한다고 말했습니다. –

3

작동합니다. 그래도 세계에서 tidiest 코드가 아니다 :

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

그것은 점점 모든 리튬의 다음 필터링 일치하는 배열에 값과 남아있는 것들을 제거를 가질 수있는.

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

+0

IMO, OP의 코드를 다시 고려해야합니다. 현재 구현은 작동하지만 클래스 나 다른 클래스와 함께 span을 사용하는 것이 훨씬 쉽고 (그리고 조금 더 빠를 것입니다). – Bojangles

+0

내 세부 정보를 다시 확인하십시오. 두 번째 "A"태그를 찾을 수 없습니다. – user889349

+0

@ user889349 -이 답변과 예제를 업데이트했습니다. –

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

내 세부 정보를 다시 확인하십시오. 두 번째 "A"태그를 찾을 수 없습니다. – user889349

관련 문제