0

在 jQuery 中,您可以运行一个选择器,其中每个元素都通过您定义的函数运行,如下所示(完全人为的示例):

jQuery.expr[':'].AllOrNothing= function(a,i,m){
    // a is the thing to match, m[3] is the input
    if(m[3] === "true"){
      return true;
    } else {
      return false;
    }
  };

然后你可以像这样使用它:

$("div:AllOrNothing(" + true + ")"); //returns all divs
$("div:AllOrNothing(" + false + ")"); //returns nothing

是否可以传递匿名函数而不是调用jQuery.expr[:].Name=

编辑

我正在设想一些可链接的东西,如下所示:

$("div").filterByFunction(function(a,i,m){ ... })
4

2 回答 2

1

听起来您只想使用内置.filter()方法并向其传递一个自定义函数,该函数检查兄弟元素以确定是返回 true 还是 false,然后隐藏其余元素。

$("section").filter(function() {
    // examine child div and return true or false
}).hide();
于 2012-08-13T23:48:16.243 回答
1

为了完整起见,您可以filter通过添加$.fn

$.fn.customFilter = function(f) {
    var filtered = $();
    this.each(function() {
        if(f.call(this)) {
            filtered = filtered.add(this)
        }
    });
    return filtered;
}

$("div").filterByFunction(function(){ return $(this).text() != "test"; })

在这种情况下,您不应该这样做。

于 2012-08-14T00:34:40.960 回答