2011-11-25 25 views
5

के भीतर मौजूद है या नहीं, मैं क्लिक पर, एक तत्व के अंदर एक तत्व को तब तक ले जाना चाहता हूं जब तक कि यह पहले से ही अंदर न हो। मैं की तरह कुछ सोच रहा था ...जांचें कि तत्व DIV

टैग क्लिक करें> यदि तत्व div में है

<ul> 
    <li><a href="#" class="tag">Art</a></li> 
    <li><a href="#" class="tag">Computing</a></li> 
    <li><a href="#" class="tag">Design</a></li> 
</ul> 

<div id="crate"> 
</div> 

jQuery

http://jsfiddle.net/establish/Xhhe8/

एचटीएमएल div में कुछ भी नहीं है> वरना कदम तत्व करना

$('.tag').on('click', function(event) { 

if ($('#crate').has(this)) { 
    // do nothing 
} 

else { 

    $(this).appendTo('#crate'); 
} 
}); 

यह काम नहीं करता है। यह भी सुनिश्चित नहीं है कि 'कुछ भी नहीं' का प्रतिनिधित्व कैसे किया जाए, आमतौर पर मैं केवल एकवचन IF कथन का उपयोग करता हूं, इसलिए इसका प्रतिनिधित्व करने की आवश्यकता नहीं है। क्या मैं इसे 'कुछ भी नहीं' करने के लिए कर सकता हूं और क्लिक अक्षम कर सकता हूं?

$(this).off(); 

उत्तर

11

यह करना चाहिए ..

$('.tag').on('click', function(event) { 

    var self = $(this); 
    if (self.closest('#crate').length) { 
     // do nothing 
    } 
    else { 
     self.appendTo('#crate'); 
    } 

}); 
1

आप आम तौर पर (यानी != साथ == की जगह) if not के साथ एक if बयान के विपरीत प्रतिनिधित्व करते हैं:

$('.tag').on('click', function(event) { 
    if ($(this).parent().get(0) != $('#crate').get(0)) { 
     $(this).appendTo('#crate'); 
    } 
}); 

के बजाय कि क्या जाँच माता-पिता में तत्व मौजूद है, माता-पिता की तुलना क्यों नहीं करें?

डेमो: http://jsfiddle.net/Xhhe8/3/

11

गैबी के जवाब काम करेंगे, लेकिन मैं खाली if ब्लॉक इस तरह के बिना यह संरचना बनाने पसंद करते हैं:

$('.tag').on('click', function(event) { 
    var self = $(this); 
    if (self.closest('#crate').length == 0) { 
     self.appendTo('#crate'); 
    } 
}); 
+0

अच्छी बात। मुझे लगता है कि अगर वह अंदर है तो वह अंततः तत्व को हटाना चाहता है .. –

+0

मैं इसे हटाना चाहता था! धन्यवाद, यह कहा जाना चाहिए था। –

+0

@DanChristian - क्या और किस परिस्थितियों में हटा दें? – jfriend00

1

आप इस कोशिश कर सकते हैं (मैं सिर्फ समायोजित थोड़ा आपके कोड का):

$('.tag').on('click', function(event) { 

    if ($('#crate').find(this).length) { 
     // do nothing 
    } 

    else { 

     $(this).appendTo('#crate'); 
    } 
}); 
0

मैं निम्नलिखित, एलेक्स के उत्तर के आधार पर करना होगा:

$('.tag').on('click', function(event) {  
    if ($('#crate').find(this).length < 1) { 
     $(this).appendTo('#crate'); 
     $(this).off('click') 
    } 
    }); 

मुझे लगता है कि खंड इस मामले में और अधिक समझ में आता है अगर; हम सिर्फ जांच कर रहे हैं कि क्रेट तत्व में 'यह' है या नहीं।

"अगर ($ ('# क्रेट') के अर्थशास्त्र में (यह) है)" भ्रामक है क्योंकि हम वास्तव में एक रिक्त सरणी लौटाते समय एक बूलियन मान की उम्मीद कर रहे हैं, जो जावास्क्रिप्ट में सत्य का मूल्यांकन करता है। तो अगर "#crate" में वास्तविक तत्व है या नहीं, तो अगर स्थिति हमेशा सत्य होती है।

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