यह .filter()
का उपयोग करता है उन data-api-*
गुण होते हैं कि करने के लिए उम्मीदवारों को सीमित करने के। शायद सबसे कुशल दृष्टिकोण नहीं, लेकिन उपयोग करने योग्य यदि आप पहले प्रासंगिक चयनकर्ता के साथ खोज को सीमित कर सकते हैं।
$("div").filter(function() {
var attrs = this.attributes;
for (var i = 0; i < attrs.length; i++) {
if (attrs[i].nodeName.indexOf('data-api-') === 0) return true;
};
return false;
}).css('color', 'red');
डेमो: http://jsfiddle.net/r3yPZ/2/
यह भी एक चयनकर्ता के रूप में लिखा जा सकता है। यहाँ मेरी नौसिखिया प्रयास है:
$.expr[':'].hasAttrWithPrefix = function(obj, idx, meta, stack) {
for (var i = 0; i < obj.attributes.length; i++) {
if (obj.attributes[i].nodeName.indexOf(meta[3]) === 0) return true;
};
return false;
};
उपयोग:
$('div:hasAttrWithPrefix(data-api-)').css('color', 'red');
डेमो: http://jsfiddle.net/SuSpe/3/
इस चयनकर्ता jQuery के पूर्व 1.8 संस्करण के लिए काम करना चाहिए। 1 के लिए।8 और उससे आगे, some changes may be required। यहाँ एक 1.8-संगत संस्करण पर एक प्रयास है:
$.expr[':'].hasAttrWithPrefix = $.expr.createPseudo(function(prefix) {
return function(obj) {
for (var i = 0; i < obj.attributes.length; i++) {
if (obj.attributes[i].nodeName.indexOf(prefix) === 0) return true;
};
return false;
};
});
डेमो: http://jsfiddle.net/SuSpe/2/
एक अधिक सामान्य समाधान के लिए, यहाँ एक चयनकर्ता कि एक regex पैटर्न लेता है और विशेषताओं को उस पैटर्न से मेल के साथ तत्वों का चयन करता है :
$.expr[':'].hasAttr = $.expr.createPseudo(function(regex) {
var re = new RegExp(regex);
return function(obj) {
var attrs = obj.attributes
for (var i = 0; i < attrs.length; i++) {
if (re.test(attrs[i].nodeName)) return true;
};
return false;
};
});
अपने उदाहरण के लिए, कुछ इस तरह काम करना चाहिए:
$('div:hasAttr(^data-api-.+$)').css('color', 'red');
डेमो: http://jsfiddle.net/Jg5qH/1/
यह सवाल सहायक हो सकता है: [jQuery डेटा चयनकर्ता] (http://stackoverflow.com/questions/2891452/jquery-data-selector) – jrummell
यह हमेशा एक "डेटा- होगा "विशेषता? – Ian
@ianpgall संभावना से अधिक, हां। वे एक बिंदु (जैसे डेटा-एपीआई) के समान होंगे, फिर शेष विशेषता नाम का अर्थ हो सकता है। –