如何将外部声明的函数用作jQuery.filter()?
我希望将jQuery的如何将外部声明的函数用作jQuery.filter()?,jquery,filter,Jquery,Filter,我希望将jQuery的.filter()与外部声明的函数一起使用,而不是将整个过滤器代码串联起来 我的特别例子是: $('ul') .filter( function() { return aClassStartsWith(this, 'class_name_beginning') } ) .each( function() { ... }); 我在下面声明了这个函数: function aClassStartsWith (that, classPrefix) {
.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可以工作,但它实际上并没有演示一个工作的过滤器,只有一个成功传递的变量。我确实尝试过按照你的建议更改函数声明的第一行,但它似乎不起作用。对不起,我误解了这个问题,编辑就要来了!