I want to select attribute value by giving attribute name (only starts with) For instance if we have html tag
<div class = "slide" data-confirmID = "46" confirmID = "54"/>
I want to select the value from the attribute starts with data-
Thanks in advance for the help.
If you want all data-* attributes, you can iterate through jq data object:
$('.slide').each(function(){
for(data in $(this).data())
console.log(data); // returns confirmID so element as an attribute `data-confirmID`
});
But this data object can contains other keys which aren't attribute, setted for example by some plugins.
To get all kinds of attribute to "starts with", you can customize your own jQuery selector:
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>
If on the opposite side, you want to check for attribute ends with specific string, you can use:
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>