【发布时间】:2012-11-07 06:35:18
【问题描述】:
我正在尝试实现一个伪类(在 jQuery 1.8.3 中)。代码如下:
(function($) {
$.extend($.expr[':'], {
group: $.expr.createPseudo(function(arg) {
var index = 0;
return function(element) {
index += 1;
var num = parseInt(arg, 10);
if (isNaN(num)) {
return false;
}
return (((index-1) % (num*2)) < num);
}
})
});
})(jQuery);
这个选择器的目的是为“n”个连续的元素组应用一种样式,并且可以像这样使用,以另一种颜色(用 'alt 分类)为 tbody(“this”)的每 3 行着色')
$(this).children(':visible').has('td').filter(':group(3)').addClass('alt')
这对一个人来说效果很好。但是,如果我在几个 tbodies 上进行迭代(使用“ $('..').each” 构造),则索引不会在两者之间重置。 这种效果可以在 jquery 1.6 中成功实现,因为我们自然(在底层的“组”函数参数中)有集合内的索引:
(function($) {
$.extend($.expr[':'], {
group: function(element, index, matches, set) {
var num = parseInt(matches[3], 10);
if (isNaN(num)) {
return false;
}
return index % (num * 2) < num;
}
});
})(jQuery);
我们如何在 jquery 1.8 中实现相同的效果?
非常感谢您的见解!
【问题讨论】:
-
问题是
var index = 0;只执行一次,就在createPseudo被调用的时候。然后它不断被返回的函数递增,该函数已经关闭了它。 -
阿萨德,这正是问题所在。每次迭代新集合时如何重置索引?或者有没有办法编写扩展以将索引作为参数传递(如在 jquery 1.6 中)?谢谢。
标签: jquery pseudo-class