4

私は、1つのデータ属性のリストdivを非常にうまく検索できる検索機能を持っています。以下は、機能しているコードです。

$(".classToSearch").each(function(){
    if ($(this).attr('data-attribute1').search(new RegExp(filter, "i")) < 0) {
        $(this).animate({opacity:0.1},100);
    } else {
        $(this).animate({opacity:0.5},100);
    }
});

検索機能に欲しいのは、複数のデータ属性を検索できるようにすることです。さまざまな形式を試しましたが、機能しません。以下は私がそれがどのように見えるべきかと思ったものです。

$(this).attr('data-attribute1','data-attribute2','data-attribute3')

また

$(this).attr('data-attribute1'||'data-attribute2'||'data-attribute3')

しかし、私はある種のforループが必要になると思っています。どんな助けでもいただければ幸いです。

- - - - - 編集 - - - - - - -

私の解決策 これにより、検索ボックスですべてのデータ属性を検索できます。

$(".classToSearch").each(function(){
        if ($(this).attr('data-attribute1').search(new RegExp(filter, "i")) < 0 &&
            $(this).attr('data-attribute2').search(new RegExp(filter, "i")) < 0 &&
            $(this).attr('data-attribute3').search(new RegExp(filter, "i")) < 0 &&         
            ) {
            $(this).animate({opacity:0.1},100);
        } else {
            $(this).animate({opacity:0.5},100);
        }
    });
4

3 に答える 3

2

.data()これらの属性に少し簡単にアクセスし、それらを配列に収集して、そこから各属性に対して正規表現テストを実行するために使用できます。

var $this = $(this),
attribs = [$this.data('attribute1'), $this.data('attribute2'), $this.data('attribute3')],
re = new RegExp(filter, "i");

if (attribs.some(function() {
    return this.match(re);
})) {
    // some attributes matched the filter
} else {
    // no attributes matched the filter
}

参照:Array.some()

于 2012-12-18T15:00:05.640 に答える
0

これを見たことがありますか...

http://api.jquery.com/multiple-attribute-selector/

あなたが求めているもののようです。

しかし、多分もう少し...

if ($(this).has([attr1],[attr2])){
   //do stuff
}
于 2012-12-18T14:53:10.297 に答える
0

事前に属性名がわからない場合、または属性を知りたくない場合は、値を検索する任意の属性のセットを使用して、次のようにします。

    $(".classToSearch").each(function() {
        var _in = $(this).text();
        $.each($(this).data(), function(k, v) {
            if (v == find) {
                // ...
            }
        });
    });

JSFiddleの場合:http://jsfiddle.net/yJLzQ/1/

于 2012-12-18T16:28:21.890 に答える