说我有这个
<a data-id-5='1'>1</a>
<a data-id-6='1'>2</a>
如何用jquery选择所有属性data-id-*
,是否可能?
答案 0 :(得分:0)
恐怕你无法直接实现它。从jQuery Doc开始,它不支持此类属性选择器。
您可以使用的是$([data-id])
。从CSS Spec开始,属性选择器也不支持动态属性名称。
无论如何,将动态值作为属性名称并不是一个好主意。
答案 1 :(得分:0)
您不能使用单个选择器。如果你知道data-id-
之后的数字,你可以做一个循环,否则你需要一个特定的元素来查询。
有关各种选择方式的详情,请参阅reference。
答案 2 :(得分:0)
然后你可以这样做:
$(function () {
$('a').each(function () {
$.each(this.attributes, function(i,n){
if(!n.name.indexOf('data-id-')){
$('body').append('<p>Name: ' + n.name + ' Value: ' + n.value +'</p>');
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a data-id-5='1' data-something-else='test'>1</a>
<a data-id-6='1'>2</a>
答案 3 :(得分:0)
没有直接的方法,但是,你可以做类似的事情
$(function(){
$("a").each(function(){
var dataAttributes = [];
$.each(this.attributes, function() {
// this.attributes is not a plain object, but an array
// of attribute nodes, which contain both the name and value
if(this.specified && this.name.indexOf("data-id-") > -1) {
dataAttributes.push(this.name);
// use this.value for value
}
});
console.log(dataAttributes);
});
});
答案 4 :(得分:0)
答案 5 :(得分:0)
您可以使用filter()
通过从基础DOMElement中检索dataset
并将data-*
属性名称与预定义的Regex相匹配来实现此目的。试试这个:
var $a = $('a').filter(function() {
for (var key in $(this)[0].dataset) {
if (/^id-\d$/i.test(key))
return this;
}
})
// use the matched elements as you require...
$a.addClass('foo');
&#13;
.foo {
color: #C00;
font-weight: bold;
text-decoration: underline;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a>1</a>
<a data-id-5='1'>2</a>
<a>3</a>
<a data-id-6='1'>4</a>
&#13;