2009-09-10 15 views
46

jQuery DOM से नोड्स को निकालना आसान बनाता है। लेकिन आप jQuery ऑब्जेक्ट से कुछ कैसे हटाते हैं?jQuery ऑब्जेक्ट से आइटम निकालें

+2

आप किस प्रकार की चीज़ को हटाने की कोशिश कर रहे हैं? – acrosman

+0

@acrosman - विशेष रूप से कुछ भी नहीं। मैं सिर्फ यह जानना चाहता हूं कि jQuery कैसे जादू करता है। एपीआई के बारे में jQuery साइट पर अच्छा प्रलेखन है, लेकिन (स्रोत के माध्यम से जाने के अलावा) मुझे jQuery ऑब्जेक्ट की आंतरिक कार्यप्रणालियों के बारे में अधिक दस्तावेज नहीं दिखाई देता। –

उत्तर

51

यदि आप jQuery ऑब्जेक्ट से नोड्स को हटाने के बारे में बात कर रहे हैं, तो filter या not फ़ंक्शंस का उपयोग करें। See here for more। jQuery वस्तु संग्रह से अधिक

var ps = $('p'); 

//Removes elements matching the specified expression 
//from the set of matched elements. 
ps = ps.not('.selector'); 
+0

@ geowa4 - उत्तर के लिए धन्यवाद। क्या आपको पता है कि फ़िल्टर दुनिया भर में ऑब्जेक्ट से नोड को हटा देता है, या सिर्फ अपने फ़ंक्शन के लिए स्थानीय? –

+8

एक चीज जिसने मुझे फिसल दिया है, यह वास्तव में एक कैश किए गए चयनकर्ता से कुछ भी नहीं हटाएगा जबतक कि आप पुन: असाइन नहीं करते। तो आपको ps = ps.filter (function() {// stuff}) की आवश्यकता है; – SimplGy

1
<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

फ़िल्टर दोहराता:

कैसे filter उपयोग करने के लिए:

var ps = $('p'); 

//Removes all elements from the set of matched elements that do 
//not match the specified function. 
ps = ps.filter(function() { 
    //return true to keep it, false to discard it 
    //the logic is up to you. 
}); 

या

var ps = $('p'); 

//Removes all elements from the set of matched elements that 
//do not match the specified expression(s). 
ps = ps.filter('.selector'); 

not का उपयोग कैसे करें। प्रत्येक तत्व के लिए: वर्तमान आइटम को jQuery ऑब्जेक्ट संग्रह में रखने के लिए filter() के अंदर true पर लौटें। JQuery ऑब्जेक्ट संग्रह से वर्तमान ऑब्जेक्ट को निकालने के लिए false पर लौटें।

$("li").filter(function() 
{ 
    if (this.className == "1" || this.className == "2") return true; 

    return false; 
}); 

इस मामले में; filter() द्वारा निष्पादित अज्ञात फ़ंक्शन सूची-आइटम के लिए सही होगा, जिसमें वर्ग और/या है, जो कि jQuery ऑब्जेक्ट संग्रह से अंतिम तीन सूची-आइटम को हटा देता है।


एक व्यावहारिक उदाहरण:

<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

यह टुकड़ा बिना क्रम वाली सूची के लिए एक कक्षा ("नीले") कहते हैं। फिर पहले दो सूची-वस्तुओं को हाइलाइट करता है। फिर पहले दो सूची आइटम पर क्लिक-हैंडलर देता:

$(function() 
{ 
    $("ul").addClass("blue").find("li").filter(function() 
    {   
     if (this.className == "1" || this.className == "2") return true; 

     return false; 

    }).addClass("highlight").click(function() 
    { 
     alert("I am highlighted!"); 
    }); 
}); 
+0

fyi, जो हर बार झूठी वापसी करेगा। आप 'उल' पर लूपिंग कर रहे हैं, न कि 'ली' जिसका नामकरण है। – geowa4

+0

मस्तिष्क-फार्ट :) हेड-अप के लिए धन्यवाद। – roosteronacid

8

जैसा कि पहले ही उल्लेख किया, $.filter() छानने डेटा के लिए एक बढ़िया विकल्प है। ध्यान दें कि the jQuery object can be handled like an array, और इस तरह, आप इस पर splice() जैसे सरणी विधियों का उपयोग कर सकते हैं।

var people = $(".people"); 
people.splice(2,1); // Remove 1 item starting from index 2 
+0

@ geowa4: पढ़ें http://www.learningjquery.com/2008/12/peeling-away-the-jquery-wrapper – Sampson

+1

@ जोनाथन: क्या आपने इसे पढ़ा? बीसी यह नहीं कहता कि यह एक सरणी है। आप एक, सुनिश्चित कर सकते हैं, और jQuery कुछ तरीकों से एक सरणी की तरह व्यवहार कर सकते हैं। लेकिन यह अभी भी एक सरणी नहीं है - एक महत्वपूर्ण भेद। वास्तव में, कुछ एरे फ़ंक्शन jQuery ऑब्जेक्ट पर काम करते हैं, जैसा कि मेरी पहली टिप्पणी में उल्लेख किया गया है। – geowa4

+0

@ geowa4: हाँ, मैंने इसे पढ़ा। मुझे पता है कि यह एक सरणी नहीं है (तकनीकी रूप से), इसलिए मैं अपने खराब शब्दों के लिए क्षमा चाहता हूं।मेरा संवाद करने का मतलब यह था कि आप इसे एक सरणी की तरह व्यवहार कर सकते हैं - जैसा कि मेरा उदाहरण इंगित करता है। – Sampson

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