我需要选择所有具有以给定前缀开头的属性的元素 - 注意我说的是属性名称,不是值。例如:
<div data-abc-name="value">...</div>
<a href="..." data-abc-another="something">...</a>
<span data-nonabc="123">...</span>
在上面的HTML中,我需要获取所有具有以data-abc-
开头的属性的元素 - 即div
和a
。
我该怎么做?
答案 0 :(得分:1)
您可以在ES6中这样做:
$('*').filter(function() {
for (attr of this.attributes)
if (attr.name.startsWith("data-abc"))
return this;
});
答案 1 :(得分:0)
我认为我们jQuery
选择器与regex
无关。但是,您可以使用this
在找到合适的选择器之前,这是一个小的解决方法,它选择匹配attribute
的元素
var nodes = [];
$("body > *").each(function(){ //iterating over all nodes
$(this.attributes).each(function(){
console.log(this.nodeName);
if(this.nodeName.indexOf("data-abc") > -1){
nodes.push(this);
}
});
});
console.log(nodes.length);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-abc-name="value">...</div>
<a href="..." data-abc-another="something">...</a>
<span data-nonabc="123">...</span>
&#13;
答案 2 :(得分:0)
以下是我的解决方案 - Fiddle。您必须创建自己的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:
$('a:attrStartsWith("data-abc")').html('hello');
$('div:attrStartsWith("data-abc")').html('hello');