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

好吧,我认为您的代码相当不错,但是另一种选择可能是运行以下单个语句:

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 回答