gpt4 book ai didi

jquery - 在伪类中获取集合索引? (jquery 1.8+)

转载 作者:行者123 更新时间:2023-12-01 00:23:47 25 4
gpt4 key购买 nike

我正在尝试实现一个伪类(在 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 中实现相同的效果?

非常感谢您的见解!

最佳答案

Sizzle中有一个名为createPositionalPseudo的函数,但没有暴露。通过复制该函数,我可以实际使用它并且它有效。我将其简化为:

$.extend($.expr[':'], {
group: $.expr.createPseudo(function(arg){
return $.expr.createPseudo(function(seed, matches){
for (var i=0; i<seed.length; i++)
if (i % (arg * 2) >= arg)
matches.push(seed[i]);
})
})
});

我创建了一个jsFiddle用于测试。

我不知道Sizzle的内部,似乎seed是伪过滤器要处理的元素列表,而matches是要返回的列表,指示哪些通过了过滤器。

createPositionalPseudo 也会修改 seed,但上面的代码不会。它可能会引起问题,因为我不知道里面有什么,我不确定。不过,在我的测试中它运行良好。

jsFiddle中的JavaScript包含一个create_group_pseudo_safe,它并没有被简化。如果简化版有任何问题,安全版功能应该可以工作。

关于jquery - 在伪类中获取集合索引? (jquery 1.8+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com