2015-02-28 8 views
7

मैं फॉर्म संग्रह प्रबंधित करने के लिए एक jQuery प्लगइन का निर्माण कर रहा हूं। प्लगइन जोड़ने के लिए जोड़ने, हटाने, ऊपर ले जाएँ और कि संग्रह को बदलने के लिए बटन नीचे ले जाने करना है।उन तत्वों को कैसे ढूंढें जो चयनकर्ता से गहरे नहीं हैं?

  • संग्रह के रूट नोड में हमेशा एक चयनकर्ता होता है, जैसे .collection

  • एक बटन जैसे ही यह .add वर्ग

मैं min और max विकल्प, लागू किया है कुछ भी हो सकता इसलिए जोड़ने और हटाने बटन तदनुसार गायब हो जाते हैं। जब मैं फॉर्म संग्रहों का संग्रह प्रबंधित करने का प्रयास करता हूं तो मेरी समस्या आती है: केवल का चयन कैसे करें बटन जो सही संग्रह को संदर्भित करते हैं?

समस्या को आसान बनाने के लिए, निम्न HTML कोड को देखो:

<div class="collection"> 
    <div>something</div> 
    <div>something</div> 
    <div> 
    <div class="add">+</div> 
    </div> 
    <div>something</div> 
    <div class="collection"> 
    <div>something</div> 
    <div>something</div> 
    <div> 
     <div class="add">+</div> 
    </div> 
    <div>something</div> 
    </div> 
</div> 

ध्यान रखें कि बटन मनमाना वाली हो सकती है रखें: संग्रह एक उपयोगकर्ता द्वारा बनाया गया है और मैं नहीं जानता कि जहां हो सकता है डोम में बटन। बीटीडब्ल्यू, यह .collection से गहरा है, जो मुझे पता है।

कैसे सब बटन जोड़ने दूसरा .collection जब तक चयन करने के लिए, लेकिन आगे नहीं?

रुचि रखने वालों के लिए, यह प्लगइन उपलब्ध है (लेकिन सक्रिय देव में) here

+0

सभी का चयन करें '.add', सभी .collection .collection .collection .add', चौराहे –

+0

हटाने" कैसे चयन करने के लिए 'चयन सभी ** बटन जोड़ें ** ** दूसरा .collection, लेकिन आगे नहीं? " 'Html' पर, क्या वह _one_' .add' तत्व होगा? – guest271314

+0

@ पॉल्स। संग्रहों को एकजुट करने वाले संग्रहों की मनमानी संख्या हो सकती है (भले ही संग्रह I संग्रहों के संग्रह संग्रह के लिए बहुत अजीब होगा)। –

उत्तर

5

मुझे लगता है कि आपको .collection ऑब्जेक्ट का संदर्भ है कि आप target नामक चर में add बटन ढूंढना चाहते हैं। यदि हां, तो आप इसे इस प्रकार कर सकते हैं:

target.find(".add").filter(function(i, element) { 
    return $(element).closest(".collection").get(0) === target.get(0); 
}); 

यह सब .add बटन कि किसी दिए गए .collection में हैं पाता है और उसके बाद जो किसी भी लक्ष्य .collection में एक नेस्टेड .collection सीधे के बजाय में निहित हैं निकाल देता है।

+0

मैंने नहीं देखा कि '.closest() 'केवल पूर्वजों का उपयोग कर रहे थे। बहुत ही रोचक। धन्यवाद। –

+0

@AlainTiemblo - मैंने कोड में बदलाव किया क्योंकि मुझे लगता है कि इसे डीओएम तत्वों की तुलना करना है, न कि jQuery ऑब्जेक्ट्स। – jfriend00

3

प्रयास करें

$(".add").not($(".collection:gt(0) .add")); 

ध्यान दें,

उपयोग jQuery .not() के .not(selector), जहां selector selctor स्ट्रिंग

.not(selector) संस्करण जोड़ा: 1 है।0

चयनकर्ता प्रकार: चयनकर्ता या तत्व या सरणी एक चयनकर्ता अभिव्यक्ति, एक डोम तत्व या तत्वों की एक सरणी सेट के खिलाफ मैच के लिए वाली एक स्ट्रिंग। 1,4

चयन प्रकार:

$(".add").not(".collection:gt(0) .add")http://jsfiddle.net/47wc5L96/21/

किया .not(selection), जहां selection jQuery वस्तु

.not(selection) संस्करण जोड़ा है के रूप में ही परिणाम देने के लिए प्रकट नहीं jQuery एकतत्वों के मौजूदा सेट से मेल खाने के लिए 10 मौजूदा jQuery ऑब्जेक्ट।

$(".add").not($(".collection:gt(0) .add"));http://jsfiddle.net/47wc5L96/20/


console.log($(".add").not($(".collection:gt(0) .add")));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<div class="collection"> 
 
    <div>something</div> 
 
    <div>something</div> 
 
    <div> 
 
<div class="add">+</div> 
 
    </div> 
 
    <div>something</div> 
 
    <div class="collection"> 
 
<div>something</div> 
 
<div>something</div> 
 
<div> 
 
    <div class="add">+</div> 
 
</div> 
 
<div>something</div> 
 
    </div> 
 
</div>

+0

हम्म, शीर्ष संग्रह के लिए बहुत अच्छा काम कर रहा है, लेकिन अगर मैं इस तरह के दूसरे से बटन जोड़ने की कोशिश करता हूं: http://jsfiddle.net/47wc5L96/25/ --- क्षमा करें: पी –

+0

@AlainTiemblo शीर्ष संग्रह फ़िल्टर करने के लिए शायद दिलचस्प है, क्योंकि इसमें एक ही कक्षा वाले नेस्टेड संग्रह होते हैं; माता-पिता कंटेनर कक्षा वाले गैर-चयनित तत्वों को हटाने की आवश्यकता है। नेस्टेड, आंतरिक संग्रह को अपेक्षाकृत सीधे चुना जा सकता है http://jsfiddle.net/47wc5L96/26/ – guest271314

+0

मुझे पता है लेकिन यह सच नहीं है, क्योंकि मुझे नहीं पता कि मेरे पास कितने घोंसले संग्रह हो सकते हैं। कल्पना कीजिए कि मेरे पास एक ऐसा फॉर्म है जो एक आरईएसटी प्रतिक्रिया का वर्णन करता है, जिससे उपयोगकर्ता को 3 फ़ील्ड के बीच चयन करने की अनुमति मिलती है: कुंजी, मूल्य और नोड, जिसमें नोड होता है जिसमें मनमाने ढंग से नेस्टेड कुंजी/मान/नोड की मनमानी संख्या हो सकती है। हम कल्पना कर सकते हैं कि प्रतिक्रिया 2 तत्वों से गहरी हो जाएगी। बीटीडब्लू, चिंता न करें, यह jQuery में करने के लिए बहुत जटिल है (मेरा दिन इस पर बिताया), मैंने अंततः प्रत्येक संग्रह के लिए अलग-अलग बटन के क्लास उपसर्ग का चयन किया। आपके समय के लिए धन्यवाद! –

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

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