2010-01-27 7 views
10

में केवल एक तत्व का चयन करना मैं एक jQuery संग्रह में किसी तत्व को किसी तत्व को कैसे सीमित कर सकता हूं?jQuery संग्रह

नीचे दिए गए मामले में, मैंने व्यवहार को सीमित करने के लिए .one() का उपयोग करने का प्रयास किया है (एक उदाहरण के लिए <li class='close'>Close</li> एचटीएमएल लाइन डालना)। व्यवहार वास्तव में केवल एक बार होता है, लेकिन $("ul>li>a") के प्रत्येक मिलान तत्व पर। संग्रह में मिलान किए गए तत्वों में से केवल एक के लिए, मैं इसे केवल एक बार कैसे कर सकता हूं?

कोई विचार?

$("ul>li>a").one(
"click",  
function(){ 
    $("ul ul") 
    .prepend("<li class='close'>Close</li>") 
} 
); 

अग्रिम धन्यवाद।

-as

उत्तर

3

first() यह पहला तत्व का चयन करता है की कोशिश करो,:

$("ul>li>a").first().one('click',  
    function(){ 
     $("ul ul").prepend("<li class='close'>Close</li>") 
    } 
); 

one() केवल एक बार एक घटना को संभालने के लिए प्रयोग किया जाता है, आप पहले से ही देखा है के रूप में,।

+0

यह काम नहीं करेगा। दस्तावेज पढ़ें। – SLaks

+0

@ स्लक्स: मैं कॉपी और अतीत के साथ बहुत तेज़ था;) धन्यवाद। –

1

आप first विधि को कॉल कर सकते हैं, जो एक नया jQuery ऑब्जेक्ट वापस करेगा जिसमें मूल में केवल पहला तत्व होगा।

हालांकि, अपने मामले में, आप के रूप में अच्छी (समकक्ष) :first चयनकर्ता, इस तरह इस्तेमाल कर सकते हैं:

$("ul > li > a:first").click(function() { ... }); 

आप केवल पहले click घटना को संभालने के लिए चाहते हैं और किसी भी अनुवर्ती क्लिक उपेक्षा, आप ' आपको .one() का उपयोग करने की आवश्यकता होगी, जैसा कि आप पहले से ही हैं।

22

jQuery चयन एक सरणी देता है। इसलिए $("selection")[0] काम कर सकते हैं। हालांकि इसके लिए बेहतर सारणीबद्ध तरीके हैं, जैसे .get(0) या .first() (यदि आप चयन/सरणी के पहले तत्व की तलाश में हैं)।

$ ("चयन")। चयन के (इंडेक्स) शुद्ध डोम तत्व देता है (कि विशिष्ट सूचकांक में) मिलता है, और नहीं jQuery वस्तु में लिपटे है।

$ ("चयन")। पहले()पहले चयन के तत्व देता है, और wraps यह एक jQuery वस्तु में

तो यदि आप जरूरी नहीं है कि पहले तत्व वापस लौटना चाहते हैं, लेकिन फिर भी jQuery कार्यक्षमता चाहते हैं, तो आप $($("selection").get(index)) कर सकते हैं।

अपनी स्थिति को देखते हुए, यह ठीक काम करना चाहिए:

// bind the 'onclick' event only on the first element of the selection 
$("ul>li>a").first().click(function() { 
    $("ul ul").prepend("<li class='close'>Close</li>"); 
}); 

कौन इस के बराबर है:

$($("ul>li>a").get(0)).click(function() { 
    $("ul ul").prepend("<li class='close'>Close</li>"); 
}); 

और यह:

$($("ul>li>a")[0]).click(function() { 
    $("ul ul").prepend("<li class='close'>Close</li>"); 
}); 

मैं से असहमत चाहिए सीएसएस चयन पर काम कर रहे रयान नतीजे फ़िल्टर करने के लिए स्ट्रिंग मूल जावास्क्रिप्ट सरणी कार्यक्षमता की तुलना में महंगा है।

2

आपको उस तत्व की अनुक्रमणिका निर्दिष्ट करना है जिसके साथ आप काम करना चाहते हैं।

यदि आपका चयनकर्ता एक से अधिक तत्व लौटाता है तो आप कुछ चीजों में से एक कर सकते हैं ... आप अपने एचटीएमएल में कक्षा या आईडी विशेषता देकर अपने तत्वों को अलग कर सकते हैं और चयनकर्ता को केवल कक्षा/जिस तत्व को आप चुनना चाहते हैं उसकी आईडी या आप उस तत्व की अनुक्रमणिका निर्दिष्ट कर सकते हैं जिसके साथ आप काम करने का प्रयास कर रहे हैं। बाद की विधि थोड़ा सा मैला है लेकिन जब तक आपकी पृष्ठ संरचना कभी नहीं बदलती तब तक काम करती है।

तो के लिए पहली विधि मैं तुम्हें की बात की थी अपने तत्वों को एक वर्ग/आईडी लागू करने के बाद यह करने के लिए अपने चयनकर्ता को बदल देंगे:

$("ul>li>a.class") 
or 
$("ul>li>a#id") 

दूसरी विधि के लिए मैंने कहा आप के लिए अपने चयनकर्ता को बदल देंगे यह:

$("ul>li>a:eq(index)") 

जहां सूचकांक उस तत्व का शून्य आधारित सूचकांक है जिसे आप चुनने का प्रयास कर रहे हैं।

$("ul>li>a").first().one('click', function() {}); 

अधिक सामान्य:

0

आप पहली बार गठबंधन करने के लिए() एक() के साथ की जरूरत है

$("ul>li>a:eq(n)").one('click', function() {}); 
संबंधित मुद्दे