jQuery – 如何按属性名称选择值以

我想通过给出属性名称来选择属性值(仅以…开头)例如,如果我们有html标签

我想从属性中选择值以data-开头 –

在此先感谢您的帮助。

如果你想要所有data- *属性,你可以遍历jq数据对象:

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

但是这个数据对象可以包含其他非属性的键,例如由某些插件设置。

编辑

要将各种属性设置为“以…开头”,您可以自定义自己的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; } }); //eg: $('.slide:attrStartsWith("data-")').css('color', 'red'); $('.slide:attrStartsWith("conf")').css('color', 'blue'); 
  
1
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); 
  

@Moob aproximation到jQuery attrBegins插件,返回属性名称(字符串),什么时候匹配…单个元素(忽略多个匹配)。 我添加了代码以返回带有匹配元素的JQuery Collection。

这是代码:

 (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:

 

Javascript:

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

注意:为了防止在使用attrBegins 选择具有以自定义字符串开头的属性名称的元素时出现性能问题,建议尽可能缩小原始选择器的范围,以减少要迭代的元素集合。 attrBegins只是过滤预先选择的元素集合,它不会探索所提供的项集的子元素。

属性是元素的属性,因此您可以使用for-in循环

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