2014-10-30 2 views
9

मैं उदाहरण के लिए विशेषता नाम (केवल के साथ शुरू होता) देकर विशेषता मान का चयन करने के अगर हम HTML टैग हैjQuery - विशेषता नाम से मान का चयन करने के लिए कैसे के साथ

<div class = "slide" data-confirmID = "46" confirmID = "54"/> 

चाहते शुरू होता है मैं मूल्य का चयन करना चाहते विशेषता से data-

सहायता के लिए अग्रिम धन्यवाद।

+0

क्या होगा यदि आपके पास 'डेटा -'' से शुरू होने वाले एकाधिक गुण हैं? आपको कौन सा मूल्य मिलना चाहिए? –

+0

jQuery में चयनकर्ता के साथ प्रारंभ होता है: http://api.jquery.com/attribute-starts-with-selector/ – Moob

+0

मेरे परिदृश्य में मेरे पास केवल एक है .. इसलिए यदि मैं 'डेटा-' से शुरू होने वाले विशेषता का नाम चुन सकता हूं, – user3111581

उत्तर

19

आप सभी डेटा- * विशेषताएं चाहते हैं, आप JQ डेटा वस्तु के माध्यम से पुनरावृति कर सकते हैं:

$('.slide').each(function(){ 
    for(data in $(this).data()) 
     console.log(data); // returns confirmID so element as an attribute `data-confirmID` 
}); 

लेकिन इस डेटा कर सकते हैं वस्तु अन्य कुंजियों जो विशेषता नहीं कर रहे हैं, कुछ प्लग द्वारा उदाहरण के लिए setted शामिल हैं।

संपादित

विशेषता के सभी प्रकार प्राप्त करने के लिए "के साथ शुरू होता है", आप अपने खुद jQuery चयनकर्ता अनुकूलित कर सकते हैं:

jQuery.extend(jQuery.expr[':'], { 
 
    attrStartsWith: function (el, _, b) { 
 
     for (var i = 0, atts = el.attributes, n = atts.length; i < n; i++) { 
 
      if(atts[i].nodeName.toLowerCase().indexOf(b[3].toLowerCase()) === 0) { 
 
       return true; 
 
      } 
 
     } 
 
     
 
     return false; 
 
    } 
 
}); 
 

 
//e.g: 
 
$('.slide:attrStartsWith("data-")').css('color', 'red'); 
 
$('.slide:attrStartsWith("conf")').css('color', 'blue');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="slide" data-confirmID="46" data-testID="666">1</div> 
 
<div class="slide" confirmID="54" >2</div>

विपरीत दिशा में, यदि आप चाहते हैं विशेषता स्ट्रिंग के साथ विशेषता समाप्त करने के लिए जांचने के लिए, आप इसका उपयोग कर सकते हैं:

jQuery.extend(jQuery.expr[':'], { 
 
    attrEndsWith: function (el, _, b) { 
 
     for (var i = 0, atts = el.attributes, n = atts.length; i < n; i++) { 
 
      var att = atts[i].nodeName.toLowerCase(), 
 
       str = b[3].toLowerCase(); 
 
      if(att.length >= str.length && att.substr(att.length - str.length) === str) { 
 
       return true; 
 
      } 
 
     } 
 
     
 
     return false; 
 
    } 
 
}); 
 

 
$('.slide:attrEndsWith("testID")').css('color', 'red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="slide" data-confirmID="46" data-testID="666">1</div> 
 
<div class="slide" confirmID="54" >2</div>

+0

धन्यवाद @ ए। वोल्फ यह मदद करता है !! – user3111581

+0

@ ए। वोल्फ हम अन्य विशेषताओं तक नहीं पहुंच सकते हैं जो "डेटा" से शुरू नहीं होते हैं? –

+1

@ निशन सेनेवीरथना निश्चित रूप से, आपको सबसे पहले सभी विशेषताओं को प्राप्त करने की आवश्यकता है और फिर अपने तर्क को लागू करने के लिए, उदाहरण के लिए विशेषताएं देखने के लिए: http://stackoverflow.com/questions/2048720/get-all-attributes-from-a-html-element- साथ-जावास्क्रिप्ट-jquery –

0

गुण तत्व की संपत्ति हैं, ताकि आप एक for-in पाश

for (var prop in element) { 
    if (prop.indexOf('data-') == 0) { 
     var val = element[prop]; 
     break; 
    } 
} 
2

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

(function($) { 
 
    $.fn.attrBegins = function(s) { 
 
     var matched = ""; 
 
     this.each(function(index) { 
 
      $.each(this.attributes, function(index, attr) { 
 
       if(attr.name.indexOf(s)===0){ 
 
        matched = attr.value 
 
       } 
 
      }); 
 
     }); 
 
     return matched; 
 
    }; 
 
})(jQuery); 
 

 
//example use 
 
var val = $('div').attrBegins('data-'); 
 
alert(val);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="slide" data-confirmID="46" confirmID="54" />

1

@Moob jQuery attrBegins प्लगइन को aproximation, विशेषता नाम (एक स्ट्रिंग) देता है, जब एक ही तत्व के मिलान होते हैं (एकाधिक मैचों को अनदेखा कर रहे हैं)। मैंने मिलान तत्वों के साथ एक JQuery संग्रह वापस करने के लिए कोड को जोड़ दिया।

यहाँ कोड है:

(function($) { 
    $.fn.attrBegins = function(s) { 
     var matched = []; 
     this.each(function(index) { 
      var elem = this; 
      $.each(this.attributes, function(index, attr) { 
       if(attr.name.indexOf(s)===0){ 
        matched.push(elem); 
       } 
      }); 
     }); 
     return $(matched); 
    }; 
})(jQuery); 

के उपयोग का उदाहरण ...

HTML:

<div> 
    <div data-pet-dog></div> 
    <div data-pet-cat></div> 
</div> 

जावास्क्रिप्ट:

var foo = $("div").attrBegins("data-pet"); 
// results into... foo = [ <div data-pet-dog></div> , <div data-pet-cat></div> ] 

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

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

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