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

时间:2018-01-18 00:50:06

标签: jquery filter

我想将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); 
}

问题是,这不起作用,我不知道为什么。也许与this上下文有关?

只是为了澄清这个过滤器的重点,如果它很重要:它是找到各个类名以某个字符串开头的元素。 ^=运算符只能作为整体运行class="..."属性。例如,对于apple

的元素,class^="ap"找不到class="orange apple"

如果有任何关于让它发挥作用的提示,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

filter方法具有签名(index,element),当您使用 this 关键字时,您的目标是Window,而不是选择器内的元素。只需将您的方法包装成这样:

$('ul').filter( function(index, element) { return aClassStartsWith(element, 'class_name_beginning'));

使用元素className的简单警报的小提琴:https://jsfiddle.net/1bmrw9be/2/

另外,改变元素的背景,链接css方法: https://jsfiddle.net/2azsnsbo/