2009-11-05 21 views
150

मुझे jquery selector से वास्तविक DOMElement प्राप्त करने के लिए एक असंभव कठिन समय मिल रहा है। नमूना कोड:एक JQuery चयनकर्ता से DOM तत्व कैसे प्राप्त करें

<input type="checkbox" id="bob" /> 
    var checkbox = $("#bob").click(function() { //some code }) 

और कोड के दूसरे भाग में मैं चेकबॉक्स के चेक किए गए मान को निर्धारित करने का प्रयास कर रहा हूं।

if (checkbox.eq(0).SomeMethodToGetARealDomElement().checked) 
    //do something. 

और कृपया, मुझे क्या करना नहीं चाहते:

if (checkbox.eq(0).is(":checked")) 
    //do something 

कि मिल मुझे चेकबॉक्स के आसपास है, लेकिन दूसरी बार मैं वास्तविक DOMElement की जरूरत है।

$("table").get(0); 

या अधिक बस:

+4

एक मामला जिसमें इसकी आवश्यकता हो सकती है: Knockout.js में फ़ंक्शन 'लागू बाइंडिंग' उम्मीद करता है कि एक डोम नोड एक jQuery चयनकर्ता नहीं है। यह प्रश्न (और इसके उत्तर) बिल्कुल वही हैं जो आवश्यक है। –

उत्तर

233

आप के साथ कच्चे डोम तत्व का उपयोग कर सकते

$("table")[0]; 

वहाँ वास्तव में एक बहुत कुछ नहीं है तुम तथापि के लिए इस की जरूरत है (मेरे अनुभव में)। अपना चेकबॉक्स उदाहरण लें:

$(":checkbox").click(function() { 
    if ($(this).is(":checked")) { 
    // do stuff 
    } 
}); 

अधिक "jquery'ish" और (imho) अधिक संक्षिप्त है। क्या होगा यदि आप उन्हें नंबर देना चाहते हैं?

$(":checkbox").each(function(i, elem) { 
    $(elem).data("index", i); 
}); 
$(":checkbox").click(function() { 
    if ($(this).is(":checked") && $(this).data("index") == 0) { 
    // do stuff 
    } 
}); 

इनमें से कुछ विशेषताएं ब्राउज़र में भी मुखौटा अंतर में मदद करती हैं। कुछ गुण अलग हो सकते हैं। क्लासिक उदाहरण AJAX कॉल है। कच्चे जावास्क्रिप्ट में इसे ठीक से करने के लिए XmlHttpRequest के लिए लगभग 7 फ़ॉलबैक मामले हैं।

+1

धन्यवाद, लेकिन प्राप्त विधि अभी भी एक jQuery तत्व देता है, न कि डोम तत्व। अन्यथा। चेक किए गए संपत्ति कॉल ने काम किया होगा। – BillRob

+0

'$ ('a') आज़माएं। इस पृष्ठ पर फ़ायरबग में (0) .nodeType == 1' प्राप्त करें, क्या यह सत्य या असफल होने का मूल्यांकन करता है? –

+0

@BillRob अगर मिलता है() डीओएम तत्व वापस नहीं कर रहा है, तो कुछ गलत है। यहां दस्तावेज़ देखें: http://docs.jquery.com/Core/get#index –

1

यदि आपको सीधे डीओएम तत्व के साथ बातचीत करने की आवश्यकता है, तो क्यों न केवल document.getElementById का उपयोग करें, यदि आप किसी विशिष्ट तत्व से बातचीत करने का प्रयास कर रहे हैं तो आप शायद आईडी को जानते होंगे, यह मानते हुए कि वर्गनाम केवल एक तत्व है या कुछ अन्य विकल्प जोखिम भरा हो जाता है।

लेकिन, मैं दूसरों से सहमत हूं कि ज्यादातर मामलों में आपको जो करना है, उसे करने के लिए आपको जो करना चाहिए वह करना सीखना चाहिए, क्योंकि यह बहुत लचीला है।

अद्यतन: एक टिप्पणी के आधार पर: यहाँ एक अच्छा विवरण के साथ एक पोस्ट है: http://www.mail-archive.com/[email protected]/msg04461.html

$(this).attr("checked") ? $(this).val() : 0 

यह मान वापस आ जाएगी अगर यह जाँच की है, या 0 अगर यह नहीं है।

$(this).val() बस डोम में पहुंच रहा है और तत्व की विशेषता "मान" प्राप्त कर रहा है, चाहे वह चेक हो या नहीं।

+2

मैं document.getElementById या MS AJAX $ विधि प्राप्त कर सकता था। चूंकि एमएस ने jquery का समर्थन किया है, इसलिए मैं एमएस AJAX जावास्क्रिप्ट पर अपनी निर्भरता तोड़ने और jquery सीखने की कोशिश कर रहा हूँ। यह पूरी तरह काउंटर-अंतर्ज्ञानी लगता है कि jquery चेकबॉक्स .val() विधि के व्यवहार को बदल देगा। चूंकि हर दूसरे .val() कॉल फॉर्म पोस्ट फ़ील्ड देता है। jQuery काम करने के लिए इतना अच्छा रहा है, इसलिए यह वैल() विधि को बदलने में भ्रमित था और एक त्वरित कामकाज खोजने की उम्मीद कर रहा था। – BillRob

+2

तो इस पृष्ठ को देखें: http://www.mail-archive.com/[email protected]/msg04461.html –

+2

यह अजीब जेम्स है कि वैल() विधि वास्तव में है .attr ("value") । मुझे आश्चर्य है कि उनके पास दो अलग-अलग तरीके क्यों हैं। मेरे लिए .val() फॉर्म पोस्ट फ़ील्ड का मान है। – BillRob

7

संपादित करें: ऐसा लगता है कि मैं यह मानने में गलत था कि आप तत्व नहीं प्राप्त कर सके। के रूप में दूसरों को यहाँ पोस्ट किया है, तो आप इसके साथ प्राप्त कर सकते हैं:

$('#element').get(0); 

मैं इस को सत्यापित किया है वास्तव में DOM एलीमेंट मिलान किया गया था देता है।

+1

खुद को दोहराएं, लेकिन फिर ... सभी ब्राउज़रों में नहीं। आईई 7 और इससे पहले में विफलता। – Slavo

6

मुझे तत्व को स्ट्रिंग के रूप में प्राप्त करने की आवश्यकता है।

jQuery("#bob").get(0).outerHTML; 

जो तुम जैसे कुछ दे देंगे: एक डोम तत्व एक स्ट्रिंग के बजाय

<input type="text" id="bob" value="hello world" /> 

...।

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