2011-08-15 15 views
9

का उपयोग कर ली टैग हटाएं मैं जावास्क्रिप्ट सरणी का उपयोग करके फ़िल्टर किए गए <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(); 

उत्तर

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 विशेषता में 'समूह' होना चाहिए। –

+0

यह सिर्फ उन सभी ली को हटा देता है जिनमें कोई लेना शामिल नहीं है, सवाल ने कहा कि उन्हें सरणी का उपयोग करके फ़िल्टर किया जाना चाहिए। –

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

आईएमओ, ओपी में कोड को फिर से विचार करने की जरूरत है; कक्षाओं, या कुछ के साथ 'अवधि' का उपयोग करने के लिए यह दूर, कहीं अधिक आसान (और थोड़ा तेज़) होगा, हालांकि वर्तमान कार्यान्वयन _does_ कार्य। – Bojangles

+0

कृपया मेरे विवरण फिर से जांचें। यह दूसरा "ए" टैग नहीं ढूंढ सकता है। – 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

कृपया मेरे विवरण फिर से जांचें। यह दूसरा "ए" टैग नहीं ढूंढ सकता है। – user889349

संबंधित मुद्दे