如何将外部声明的函数用作jQuery.filter()?

如何将外部声明的函数用作jQuery.filter()?,jquery,filter,Jquery,Filter,我希望将jQuery的.filter()与外部声明的函数一起使用,而不是将整个过滤器代码串联起来 我的特别例子是: $('ul') .filter( function() { return aClassStartsWith(this, 'class_name_beginning') } ) .each( function() { ... }); 我在下面声明了这个函数: function aClassStartsWith (that, classPrefix) {

我希望将jQuery的
.filter()
与外部声明的函数一起使用,而不是将整个过滤器代码串联起来

我的特别例子是:

$('ul')
    .filter( function() { return aClassStartsWith(this, 'class_name_beginning') } )
    .each( function() { ... 
});
我在下面声明了这个函数:

function aClassStartsWith (that, classPrefix) { 
    var reString = '\b' + classPrefix;
    var re = new RegExp(reString, "g");
    return that.className.match(re); 
}
问题是,这不起作用,我不知道为什么。也许与
这个
上下文有关

为了澄清这个过滤器的要点,以防万一:它是查找单个类名以某个字符串开头的元素。
^=
运算符只能作为一个整体对
class=“…”
属性进行操作。例如,在带有
class=“orange apple”


如果你能给我一些建议,我会很感激的。谢谢

过滤器方法具有签名(索引,元素),当您使用this关键字时,您的目标是窗口,而不是选择器中的元素。只需像这样包装您的方法:

$('ul').filter( function(index, element) { return aClassStartsWith(element, 'class_name_beginning'));
fiddle使用元素类名称的简单警报:

另一个,改变元素的背景,链接css方法:

您需要从filter@baao这意味着您确实需要单词
return
更具体地说,将
aClassStartsWith(this'class\u name\u beging')
更改为
return aClassStartsWith(this'class\u name\u beging')
我刚刚尝试过(在调用函数之前添加单词
return
),但是没有用。选择器仍然返回零个元素。将筛选器代码放入行中可以正常工作:
$('ul').filter(函数(){返回this.className.match(/\bclass\u name\u start/g)).length
返回
1
,结果表明,这仍然不起作用的原因是我未能在RegExp声明中“转义转义字符”--
\\b
是必需的,而不是
\b
。当我在线拼写过滤器时,这不是必需的,因为我在那里使用了字符串文字(
/…/
)。返回的
也确实丢失了,谢谢!除了使用
var funcName=function(){}
声明函数之外,我不清楚您更改了什么,我认为这可以与我的语法互换:
function funcName(){}
。我确实看到您的fiddle可以工作,但它实际上并没有演示一个工作的过滤器,只有一个成功传递的变量。我确实尝试过按照你的建议更改函数声明的第一行,但它似乎不起作用。对不起,我误解了这个问题,编辑就要来了!