私はお勧めします:
$('*').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');
リンクされたデモでわかるように、元のセレクターに一致するすべての要素に色を付けます。
参考文献:
- プレーンな JavaScript:
- jQuery: