我想将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"
如果有任何关于让它发挥作用的提示,我将不胜感激。谢谢!
答案 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/