गुण द्वारा तत्वों का चयन करें


253

मेरे पास जनरेट किए गए आईडी के साथ चेकबॉक्स का संग्रह है और उनमें से कुछ में एक अतिरिक्त विशेषता है। क्या किसी तत्व की विशिष्ट विशेषता है या नहीं यह जांचने के लिए JQuery का उपयोग करना संभव है? उदाहरण के लिए, क्या मैं यह सत्यापित कर सकता हूं कि निम्नलिखित तत्व में "myattr" का गुण है? विशेषता का मान अलग-अलग हो सकता है।

<input type="checkbox" id="A" myattr="val_attr">A</input>

उदाहरण के लिए, मैं उन सभी चेकबॉक्सों का एक संग्रह कैसे प्राप्त कर सकता हूं जिनमें एक-एक करके बिना जांच किए यह विशेषता है? क्या यह संभव है?


2
एक तरफ के रूप में, एक <input /> एक खाली टैग है जो इसके अंदर सामग्री रखने के लिए नहीं है। शायद आप यह देखने के लिए चिंतित नहीं हैं कि आपके पास myatttr मौजूद है ...
ScottE


यदि आपके पास पहले से ही एक संग्रह है और आप केवल विशिष्ट विशेषता वाले तत्वों को फ़िल्टर करना चाहते हैं - तो बस करें -$filtered = $collection.filter('[attribute_name]');
jave.web

जवाबों:


190

क्या आपका मतलब है कि आप उन्हें चुन सकते हैं? यदि हां, तो हां:

$(":checkbox[myattr]")

4
ध्यान दें कि यदि आप अस्तित्व के लिए परीक्षण कर रहे हैं (संभवत: यदि एक उदाहरण में, उदाहरण के लिए) तो यह संभवतः अधिक सही / विश्वसनीय है: यदि ($ ("चेकबॉक्स [myattr]")। लंबाई ()> 0) ...
रिनोगो

14
@rinogo: वास्तव में आप सभी की जरूरत है अगर ($ (": चेकबॉक्स [myattr]") लंबाई)। लंबाई के बाद (ए) आवश्यक नहीं है, न ही> 0, 0 समानता परीक्षणों में असत्य का मूल्यांकन करता है जिन्हें सख्त समानता (मूल्य और प्रकार दोनों) की आवश्यकता नहीं होती है।
bmarti44

1
यदि आप कुछ ऐसा करने की कोशिश करते हैं तो यह js एरर्स को फेंक देता है: td [myattr]। इसलिए मुझे लगता है कि यह सुविधा विशेष रूप से चेकबॉक्स को लक्षित कर रही थी।
बेवकूफ

6
बृहदान्त्र छद्म-वर्गों का चयन करता है, जो टाइप एटर द्वारा निर्धारित किया जाता है। Td की समान चीज़ को लागू करने के लिए, कोलन को छोड़ दें।
ढोखे

या यदि आप यह देखना चाहते हैं कि क्या कोई hrefविशेषता नहीं है जैसे कि सभी लिंक ढूंढें जिसमें विशेषताएँ नहीं हैं । $("#myBox").find('a').filter(':not([href])')
टिमब्रोन

368
if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}

संपादित करें:

ऊपर मौजूद में गिर जाएगा elseजब myattrमौजूद है, लेकिन एक खाली स्ट्रिंग या "0" है। यदि यह समस्या है तो आपको स्पष्ट रूप से परीक्षण करना चाहिए undefined:

if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}

3
शानदार जवाब नहीं। "अपरिभाषित" जावास्क्रिप्ट में एक कीवर्ड नहीं है। देखें constc.blogspot.com/2008/07/...
mhenry1384

16
आप सही हैं ... लेकिन फिर undefinedसे परिभाषित करने को एक किनारे का मामला माना जाता है और ऊपर की तुलना सभी मामलों में 99% काम करेगी।
स्टीफन गेह्रिग

6
काम नहीं करता है अगर विशेषता एक खाली स्ट्रिंग है। एक मिसाल है myattr = ''
पौराणिक

3
@mhenry - तब आप त्रुटि में होंगे :) यदि आप मेरे लिए या मेरे साथ परियोजना का निर्माण कर रहे थे, तो मुझे आपकी त्रुटि ठीक करने की आवश्यकता होगी। यदि यह एक खुला स्रोत पैकेज होता तो मैं (कई उपयोगकर्ताओं के साथ) इसे इस आधार पर उपयोग करना बंद कर देता कि यह खराब कोडित था। यदि आप इसे नहीं बदलते हैं, तो कोई और अंततः त्रुटि के बिना एक संस्करण का कांटा देगा और लोग इसके बजाय इसका उपयोग करेंगे, और आप अपना स्वयं का प्रोजेक्ट खो देंगे, जैसा कि कई बार पहले हुआ है जब कोई एक पैकेज बनाता है जिसके साथ एक अच्छा विचार है खराब कार्यान्वयन। किसी भी तरह से यह आपको कोडिंग प्रथाओं के बारे में एक सबक सिखाना होगा :)
जिम्बो जॉनी

8
अगर (टाइपो $ ('# ए')। अटर ('माट्र')! == 'अपरिभाषित')
जेम्स वेस्टगेट

166

मुझे पता है कि प्रश्न पूछे जाने में काफी समय हो गया है, लेकिन मैंने जांच को इस तरह स्पष्ट होने के लिए पाया:

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(जैसा कि इस साइट पर यहां पाया गया है )

के बारे में प्रलेखन यहाँ पाया जा सकता है


W3C के अनुसार, बूलियन विशेषताओं की उपस्थिति या अनुपस्थिति से परिभाषित किया जाता है। jQuery विशेषता मानों में हेरफेर करने के लिए विधि .attr () प्रदान करता है। लेकिन हम बिना मूल्य के एक विशेषता कैसे जोड़ते हैं? किसी विशेषता की उपस्थिति का परीक्षण करने के लिए आपके द्वारा प्रदान की जाने वाली विधि jQuery प्रलेखन (1.8.2) में वर्णित नहीं है। क्या आप जानते हैं कि jQuery के साथ एक विशेषता कैसे जोड़ा जाता है?
चमीक

@chmike एक विशेषता जोड़ने के लिए, मैं इसे इस तरह से करूँगा: $ ("# ए")। प्रोप ("myNewAttribute", someValue); आप someValue को अपनी पसंद का कोई भी मूल्य दे सकते हैं: स्ट्रिंग, संख्या, खाली स्ट्रिंग, सही / गलत।
जोनाथन बर्जरॉन

यह निर्दिष्ट मान के साथ विशेषता को जोड़ेगा जो कि बिना मूल्य के विशेषता के समान नहीं है।
13

5
मैं सहमत हूं, यह सबसे अच्छा जवाब है (jQuery का उपयोग करके) - बहुत स्पष्ट और संक्षिप्त। मैंने खुद को आश्चर्यचकित पाया कि jQuery के पास सिर्फ एक hasAttribute () फ़ंक्शन क्यों नहीं है, और उत्तर है, कि देशी जावास्क्रिप्ट में पहले से ही एक है। किसी भी HTML डॉम एलिमेंट में एक तरीका हैअभिव्यक्ति ('एट्रिब्यूटनाम')। तो आप यह कर सकते हैं: $ ('# ए') [0] .AttAttribute ('myattr') @chmike - मुझे नहीं लगता कि आप jQuery फ़ंक्शंस का उपयोग करके एक खाली विशेषता जोड़ सकते हैं, लेकिन आप इसे HTML डोम तत्व के साथ कर सकते हैं इस तरह से वस्तु इस प्रकार है: $ ("# ए") [0] .सेटएटवर्ट नॉनकोड (डॉक्यूमेंट.क्रिएटएटवर्ट ("myNewAttribute"));
डेनियल हॉवर्ड

1
बस एक टिप्पणी जो मुझे यह उत्तर पसंद है, लेकिन टिप्पणियों के बारे में उलझन में थी कि बिना मूल्य के विशेषता कैसे पूछें। ये सवाल या जवाब से संबंधित नहीं हैं।
गोडेई

9

यह काम करेगा:

$('#A')[0].hasAttribute('myattr');


@RetroCoder, आपके लिंक के बारे में आपका क्या कहना है? यह परीक्षण काफी अच्छा लगता है, विशेष रूप से क्योंकि अक्सर आप $(this).<something>यहां उपयोग करते हैं जब आप this.hasAttribute('...')सीधे कर सकते हैं (और पुराने ब्राउज़रों की परवाह नहीं करते हैं, बिल्कुल।)
एलेक्सिस विलके

8

जावास्क्रिप्ट में, ...

null == undefined

... लौटता है true*। यह बीच का अंतर है ==और ===। इसके अलावा, नाम undefinedको परिभाषित किया जा सकता है (यह एक कीवर्ड की तरह नहीं nullहै) इसलिए आप किसी अन्य तरीके से जांच करने से बेहतर हैं। सबसे विश्वसनीय तरीका शायद typeofऑपरेटर के रिटर्न मूल्य की तुलना करना है ।

typeof o == "undefined"

फिर भी, अशक्त की तुलना इस मामले में काम करना चाहिए।

* मान undefinedलेना वास्तव में अपरिभाषित है।


अनिर्धारित जावास्क्रिप्ट में एक आरक्षित कीवर्ड नहीं है। JQuery में इसका नाम मुंग से मुमकिन है क्योंकि इसका निर्माण "var" कंस्ट्रक्टर के साथ किया गया है और इसका मूल्य नहीं है। मैजिक लाइब्रेरी कोड के शीर्ष पर, infact, एक लाइन है जो बताती है "var अपरिभाषित;" और इस तरह एक अपरिभाषित चर को jQuery के दायरे में उस नाम से परिभाषित किया जाता है ... लेकिन यह "var अनाम" टाइप करके सभी को "अनाम" नाम दिया जा सकता है;
इमानुएल डेल ग्रैंडे

1
यह एक विशेषता के लिए जाँच नहीं करता है, एक जावास्क्रिप्ट ऑब्जेक्ट में एक संपत्ति के लिए यह जाँच करता है कि इसमें 6 अपवोट क्यों हैं?
ncubica

5

$("input[attr]").length एक बेहतर विकल्प हो सकता है।


4

कुछ प्रकार के विचारों को "टाइपोफ़", jQuery ".is" और ".फिल्टर" का उपयोग करके चारों ओर फेंक दिया गया था, इसलिए मैंने सोचा कि मैं उनकी तुलना एक त्वरित पूर्णता पोस्ट करूंगा। टाइपोफ इसके लिए सबसे अच्छा विकल्प प्रतीत होता है। जबकि अन्य लोग काम करेंगे, इस प्रयास के लिए jq लाइब्रेरी को आमंत्रित करते समय एक स्पष्ट प्रदर्शन अंतर दिखाई देता है।


2
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}

1
यह शायद काम नहीं करेगा, क्योंकि आप बिना किसी मूल्य के एक विशेषता जोड़ सकते हैं। ऐसे मामले में, यह स्थिति बीत जाएगी, हालांकि वांछित व्यवहार सही हो सकता है, विशेषता सेट है। PHPs के समान isset()या js में उदाहरण के लिए $("#element").attr('my_attr') === false,
ulkas

2

के रूप में इस पोस्ट , का उपयोग करते हुए .isऔर विशेषता चयनकर्ता [], आप आसानी से एक समारोह (या प्रोटोटाइप) जोड़ सकते हैं:

function hasAttr($sel,attr) {
    return $sel.is('['+attr+']');
}

1
$("input#A").attr("myattr") == null

1
$ ()। Attr () हमारे उदाहरण द्वारा सुझाए गए अनुसार वापस नहीं आएगा, इसके बजाय यह अपरिभाषित वापस आएगा।
स्टीफन गेह्रिग

मेरे लिए फायरबग में काम करता है, लेकिन वह फायरबग चीज हो सकती है
मथियास एफ

यह कोशिश नहीं की है, लेकिन यह है कि प्रलेखन क्या कहते हैं: docs.jquery.com/Attributes/attr#name
स्टीफन Gehrig

1

बस:

$('input[name*="value"]')

अधिक जानकारी: आधिकारिक डॉक्स


1
स्ट्रिंग के भीतर अनपेक्षित डबल कोट्स दोहरे कोट्स के साथ परिभाषित हैं, न कि एक वैध स्ट्रिंग। दुर्भाग्य से मैं इसे आपके लिए संपादित नहीं कर सकता क्योंकि एक संपादन में 6 वर्ण या अधिक बदलना होगा, हालांकि इसे बदलना होगा।
जिमबो जॉनी

0

एक विशेषता के साथ सभी तत्वों का चयन करने के अलावा $('[someAttribute]')या $('input[someAttribute]')आप किसी ऑब्जेक्ट पर बूलियन चेक करने के लिए एक फ़ंक्शन का उपयोग कर सकते हैं जैसे कि एक क्लिक हैंडलर में:

if(! this.hasAttribute('myattr') ) { ...


0

मैंने npm पैकेज को इच्छित व्यवहार के साथ बनाया है जैसा कि प्रश्न में ऊपर वर्णित है।

[Npm] और [github] से लिंक करें

उपयोग बहुत सरल है। उदाहरण के लिए:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

सच लौटाता है।

ऊंट के साथ भी काम करता है।


0

एक निश्चित विशेषता वाले तत्वों का चयन करने के लिए, उपरोक्त उत्तर देखें।

यह निर्धारित करने के लिए कि किसी दिए गए jQuery तत्व में कोई विशिष्ट विशेषता है या नहीं, मैं एक छोटे प्लगइन का उपयोग कर रहा हूं जो कि रिटर्न देता है trueअगर ajQuery संग्रह में पहला तत्व यह विशेषता है:

/** hasAttr
 ** helper plugin returning boolean if the first element of the collection has a certain attribute
 **/
$.fn.hasAttr = function(attr) {
   return 0 < this.length
       && 'undefined' !== typeof attr
       && undefined !== attr
       && this[0].hasAttribute(attr)
}

-5

JQuery एक स्ट्रिंग के रूप में विशेषता लौटाएगा। इसलिए आप निर्धारित करने के लिए उस स्ट्रिंग की लंबाई की जांच कर सकते हैं:

if ($("input#A").attr("myattr").length == 0)
 return null;
else
 return $("input#A").attr("myattr");

इसलिए, मुझे पता है कि यह एक साल से अधिक हो गया है और मुझे इसे बहुत पहले ही संबोधित करना चाहिए था। मैं इस बारे में उत्सुक हूं कि किस हिस्से में काम नहीं हुआ? अगर मुझे पता था कि आप उन्हें चुनने की कोशिश कर रहे हैं तो मैंने उपरोक्त कोड नहीं दिया है। मुझे लगा कि आप उन्हें व्यक्तिगत रूप से जांचना चाहते हैं। JQuery वास्तव में एक स्ट्रिंग के रूप में विशेषता वापस करता है और आप किसी भी अन्य स्ट्रिंग की तरह उस स्ट्रिंग की लंबाई की जांच कर सकते हैं। जब तक आपके चयनकर्ता और विशेषता सही थे, तब तक आपको यह देखने के लिए परीक्षण करना चाहिए था कि क्या किसी विशेष इनपुट में वह विशेषता थी। वैसे भी, मैं नहीं चाहता था कि लोग सिद्धांत को छूट दें क्योंकि यह काम करता है।
zach

6
यह उस मामले में विफल हो जाएगा, जहां विशेषता मौजूद नहीं है, जिस स्थिति में $ ("इनपुट # ए")। attr ("myattr") एक स्ट्रिंग के बजाय अपरिभाषित लौटाता है और अपरिभाषित होता है। गति विफल हो जाएगी
Rune FS

केवल सामग्री के साथ एक खाली विशेषता का पता लगाता है, गैर-मौजूदा विशेषता पर विफल रहता है। मूल प्रश्न विशेषता के अस्तित्व का पता लगाने के बारे में था, जिससे यह प्रश्न के उत्तर के रूप में विफल हो गया।
जिमबो जॉनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.