6

HTMLテーブルをフィルタリングする必要があります。そのために、すべての要素に対して each コールバックを作成し、そのうちの 1 つに特定のパターンが含まれているかtrどうかをテストしました。tr-children

$("#filter").keypress(function() {
    var filter = $(this).val();

    $("#table1 tr[data-config]").each(function(){

        var val = $(this).find(":contains('" + filter + "')");

        if(val.length > 0){
            $(this).css("display","table-row");
        }else{
            $(this).css("display","none");
        }
    });
});

動作しますが、要素にテキストが含まれているかどうかをテストする機能はありますか?

現時点では、パターンを含むすべての要素のリストを取得し、ゼロより大きい場合はカウントします。このパターンが発生してブール値を返すかどうかをテストするjQuery関数はありますか? テーブルには多くの行を含めることができるため、オーバーヘッドをできるだけ少なくしたいと考えています。

4

3 に答える 3

4
///// replace these lines...
// var val = $(this).find(":contains('" + filter + "')");
// if(val.length > 0){

///// with this line
if($(this).text().match(filter)){

これは、行の内容全体をテキスト文字列に変換し、単純な文字列比較関数を使用して、フィルターがテキスト (したがって行) 内に含まれているかどうかを確認することで機能します。

于 2012-08-06T07:30:47.760 に答える
4

答えは良いですが、 :contains を使用するより簡単な方法があります

一般に、次のようにします。

$(".class:contains('texttofind')").css("display", "none");

上記の特定の例では、次のようにします。

$("#table1 tr[data-config]:contains('" + filter + "')").css("display","table-row");

詳細については、 https : //api.jquery.com/contains-selector/ をご覧ください。

.eachこれにより、 orでループする必要がなくなります.find

于 2016-01-28T21:01:04.213 に答える
0

フィルターが大文字と小文字を区別する場合、これは大文字と小文字を区別しないようにする方法です。

.match("/pattern/i"); 

ビリーに小道具!

于 2015-10-27T05:20:46.637 に答える