2010-02-10 14 views
6

मैं देख सकते हैं कि एक तत्व के साथ एक विशिष्ट विशेषता शामिल हैं:jQuery जांच करता है, तो तत्व किसी भी विशेषता

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

मैं कैसे जांच कर सकते हैं एक तत्व किसी भी विशेषता है?

धन्यवाद

+0

मुझे आश्चर्य है कि jQuery '$ ("# a [*]") की तरह कुछ प्रदान करता है? –

+0

@Naeem: मुझे लगता है कि यह एक अच्छी सुविधा हो सकती है लेकिन चूंकि इस समस्या को हल करने के आसान तरीके हैं, मुझे नहीं लगता कि वे इसे जोड़ सकते हैं। – Tarik

उत्तर

6

यहां एक फ़ंक्शन था टी निर्धारित करता है कि एक चयनकर्ता मिलान तत्वों की किसी भी कम से कम एक विशेषता है:

function hasOneOrMoreAttributes(selector) { 
    var hasAttribute = false; 
    $(selector).each(function(index, element) { 
     if (element.attributes.length > 0) { 
      hasAttribute = true; 
      return false; // breaks out of the each once we find an attribute 
     } 
    }); 
    return hasAttribute; 
} 

उपयोग:

if (hasOneOrMoreAttributes('.someClass')) { 
    // Do something 
} 

आप चयनित तत्वों है कि कम से कम एक विशेषता पर संचालित करने के लिए चाहते हैं, तो यह और भी आसान है

// Works on the latest versions of Firefox, IE, Safari, and Chrome 
// But not IE 6 (for reasons I don't understand) 
jQuery.expr[':'].hasAttributes = function(elem) { 
    return elem.attributes.length; 
}; 

जो तुम इस तरह उपयोग कर सकते हैं:

- आप एक कस्टम फ़िल्टर बनाने
+0

में देख रहा हूं यह थोड़ा सा नहीं है:' $ ("कुछ")। (0) .attributes> 0' पर्याप्त होगा मुझे लगता है। – Tarik

+0

@ तारिक - जो केवल पहले मिलान किए गए तत्व की जांच करता है, जब कई मिलान हो सकते हैं। –

+0

@ जेफ - क्या इस फ़ंक्शन के साथ विशेषता वाले तत्वों पर कक्षा जोड़ने का कोई तरीका है? थैंक्स फिर से – Mircea

9

आप अगर तत्व किसी विशेष विशेषता है देखना चाहते हैं, तो बस इस कार्य करें:

if ($('#something').is('[attribute]')) { 
    // ... 
} 
+1

मुझे यह देखने में दिलचस्पी है कि किसी तत्व के पास कोई विशिष्ट विशेषता नहीं है या नहीं। – Mircea

+0

ठीक है, लेकिन बिंदु यह है कि आपने ऊपर दिए गए उदाहरण में जो लिखा है वह काम नहीं करेगा। – Pointy

+0

ओह, ठीक है, मैं आपके बिंदु को समझता हूं ... Thanx – Mircea

2

नहीं एक पूरी जानकारी का उपयोग करने की आवश्यकता होगी jQuery कोड लेकिन यह

$("a").click(
function() { 
    if($("a").get(0).attributes > 0) 
     alert("it has attributes"); 
}) 
+0

थानक्स तारिक, मैं इस – Mircea

0

यहाँ एक समाधान है कि मुझे पता है कि अगर एक तत्व विशेषताओं है कि IE में काम करता है, क्रोम और फ़ायरफ़ॉक्स परिभाषित किया गया है और अधिक विश्वसनीय हो पाया है:

$(selector).each(function(index, element) { 
    if (element.hasAttributes) { // Some browser supports this method 
     if (element.hasAttributes()) { 
      return true; 
     } 
    } else { 
      // IE counts many attributes - even if not set explicitly 
      var attrs = element.attributes; 
      for (var i = 0; i < attrs.length; i++) { 
       if (attrs[i].specified) { 
        return true; 
       } 
      } 
    } 
    return false; 
}); 

समस्या आईई देता है कि उच्च गुण भी गिनती जब कोई भी है स्पष्ट रूप से सेट है। उदाहरण के लिए, एक साधारण < पी> टैग के लिए, आईई मुझे बता रहा था कि इसमें 111 विशेषताएं थीं। कि समाधान के साथ, मैं उन विशेषताओं को फिल्टर करने की है कि मैं में दिलचस्पी नहीं थी सक्षम था

यह समाधान यहां ले जाया गया था। (! बस यह मामला पेज हटा दिया जाता है में नकल) http://help.dottoro.com/ljevmnkf.php

1

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

$('selector[attribute]') 

कि jQuery वस्तु वापस आ जाएगी सभी तत्वों को शामिल करने के लिए कि इसके मूल्य के बावजूद विशेषता शामिल है। उदाहरण के लिए।

$(':text[maxlength]').addClass('has_max_length'); 

यह अधिकतम टेक्स्ट इनपुट को 'has_max_length' की श्रेणी के अधिकतम टेक्स्ट इनपुट प्रदान करेगा।

4
$("selector").get(0).hasAttributes("attributes"); 
+0

महान जवाब! धन्यवाद –

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