jQuery自定义过滤器问题:元素堆栈太多

Posted

技术标签:

【中文标题】jQuery自定义过滤器问题:元素堆栈太多【英文标题】:jQuery custom filter problem: element stack is way too much 【发布时间】:2011-05-20 04:48:36 【问题描述】:

我正在尝试实现 ":random" 选择器,它从元素堆栈中选择一个随机元素。

这是代码:http://jsfiddle.net/nuSWF/

问题是选择器有时会尝试选择一个不存在的元素(超出索引)。所以我准备了突出显示原因的演示代码,但我不明白为什么。我似乎是一个错误或什么的。

P.S:我知道我可以用其他方法选择一个随机元素,但这次我必须实现它,也想知道里面发生了什么。

【问题讨论】:

我不确定,但length 不是总是比最大​​索引多一吗? (长度 = 10 个元素最后一个元素 = 9) 还有,索引失败时有什么值? 【参考方案1】:

您所看到的堆栈长度是正常的,它只是评估mydiv1 中的all <a> 元素上的:random 选择器@ 之前 @ 987654321@,所以此时的长度是4。

例如,这会产生您期望的结果:

var elements2 = $('#mydiv1>a').filter(':random');

You can test it out here.


所以总体上发生的情况是您的选择器确实过滤到随机的 <a> 元素...但是这些 可能会或可能不会稍后会被 > child selector 进一步过滤掉(如果它们是在<span> 下,它们会被过滤)。如果您考虑一下,所有选择器都是如此...您执行的任何过滤器都只会减少元素集...它们以后可能会被更多选择器进一步过滤。

【讨论】:

以上是关于jQuery自定义过滤器问题:元素堆栈太多的主要内容,如果未能解决你的问题,请参考以下文章

jquery 数据表自定义过滤器

Spring MVC过滤器获取自定义jquery ajax标头

2 个自定义组合框,在 DataTables 中过滤结果,获取 2 个组合框来过滤结果的问题 - JavaScript、jQuery

如何使用 jQuery 选择除过滤器元素之外的所有子元素

jQuery数据表自定义排序和过滤

如何从 Spring Security 中的默认过滤器堆栈中删除一个过滤器?