我建议:
$('*').filter(
function(){
var that = $(this),
data = that.data();
for (var a in data){
if (data.hasOwnProperty(a)){
return /^something/.test(a);
}
}
}).css('color','red');
JS 小提琴演示。
编辑以提供一个简单的 jQuery 插件来实现相同的功能,需要您传入正则表达式:
$.fn.hasAttrMatching = function (expr) {
var reg, data;
if (!expr) {
return this;
} else {
if (typeof expr === 'string') {
reg = new RegExp(expr);
} else if (typeof expr === 'object' && expr.test) {
reg = expr;
}
return this.filter(function () {
data = $(this).data();
for (var a in data) {
if (data.hasOwnProperty(a)) {
return reg.test(a);
}
}
});
}
};
JS 小提琴演示。
这可以使用文字正则表达式如下调用:
$('body, body *').hasAttrMatching(/^something/).css('color', 'red');
使用正则表达式的字符串表示:
$('body, body *').hasAttrMatching('^something').css('color', 'red');
在这一点上提醒您似乎有些明显,但如果没有传入表达式(作为正则表达式文字或字符串),则不会发生过滤,插件将返回它收到的相同元素,以说明:
$('body, body *').hasAttrMatching().css('color', 'red');
正如您在链接的演示中看到的那样,它为原始选择器匹配的所有元素着色。
参考: