0

jQueryセレクターの結果セットを補完する最良の方法は何ですか? 次のようなことをしたい:

jQuery(this).find("div:contains('someValue')").show();

しかし、この選択の補数を非表示にしたい:

jQuery(this).find("div:not(:contains('someValue'))").hide();

補完的なセレクターを実行するだけでなく、これに対するより洗練された解決策はありますか? 私が見ることができる別の方法は、最初にすべての div を見つけ、結果を保存し、これをフィルタリングすることです。

var results = jQuery(this).find("div");
results.find(":contains('someValue')").show();
results.find(":not(:contains('someValue'))").hide();

しかし、それはそれほど良くないようです。何か案は?

4

4 に答える 4

3
var results = jQuery(this).find("div"),
    selector = ":contains('someValue')";

results.filter(selector).show();
results.not(selector).hide();

@Simonコメントで述べたように、この特定のソリューションを改善する方法があります。

var results = jQuery("div", this),
    selector = ":contains('someValue')";

results.filter(selector).show();
results.not(selector).hide();
于 2012-09-07T11:17:15.437 に答える
1

あなたのコードはかなり良いと思いますが、別のオプションとして、次の 1 つのステートメントを実行することもできます。

jQuery(this).find("div").each(
    function() {
        var me = $(this);
        var f = me.is(":contains('someValue')") ? "show" : "hide";
        me[f]();
    }
);
于 2012-09-07T11:16:18.843 に答える
1

このようにしてみて、

jQuery(this).find("div").hide();
jQuery(this).find("div:contains('someValue')").show();
于 2012-09-07T11:29:38.660 に答える
0
/** $.grepl 
*   uses a regular expression for text matching within an internal $.grep.
*/

$.extend({ 
 "grepl": function(el, exp){ 
  exp=new RegExp(exp,'gi'); // create RegExp
  return $( 
   this.grep( el, function(n,i){ // run internal grep
    return el[i].textContent.match(exp) != null; // match RegExp against textContent
   })
  );
 }
});

$.grepl( $('div'), '^.*someRegexp.*$' ).css('display','none'); // usage of the function

これが「:contains」式を正確に使用していないことはわかっていますが、結果は同じになるはずです。

于 2014-01-11T13:43:20.840 に答える