【问题标题】:Index of an element in a filtered jQuery set过滤后的 jQuery 集中元素的索引
【发布时间】:2015-03-27 01:09:29
【问题描述】:

所以我现在已经搜索了几个小时,但还没有真正找到解决方案。

似乎 jQuery 方法 .index() 在调用集合中的元素时没有考虑选择器。

澄清一下,当我有一个包含 5 个 li 元素的列表时,其中元素 2、3 和 4 具有“foo”类。当我第一次使用 $('li.foo') 过滤这些项目时,我得到了一个大小为 3 个元素的集合。当我像这样 $('li.foo').first().index() 对集合中的第一项执行 .index() 时,而不是返回 0(因为它是集合中的第一项并且索引开始从 0 开始计数),它实际上返回 1(或者换句话说,第二项的索引)。

现在对于上面的示例,在我的示例中似乎不需要使用索引,但在我的代码中,我实际上过滤了过滤后的集合( $('li.foo').filter('.active') )获取单个项目,然后获取该项目的索引。

问题似乎是 .index 忽略了过滤器和选择器,而我在 $.inArray(); 中没有任何运气

如果有人能阐明如何以可靠的方式获取索引,我将非常感激!

【问题讨论】:

  • 我不确定我是否理解您要正确执行的操作,您可以发布一个 sn-p 以便我们查看您的代码示例吗?它不一定是实际的复制粘贴,但一些演示您所面临问题的代码会有所帮助。
  • 我会尽快添加一个 sn-p :)
  • 我遇到的主要问题是过滤列表上的 .index() 没有返回预期的索引号。相反,您必须通过传入第二个选择器来过滤两次。 $filteredList.first().index() 返回的东西不同于 $filteredList.index($filteredList.first()) 我知道这很令人困惑,但这是我碰到的东西

标签: javascript jquery html css performance


【解决方案1】:

index 方法有多种变体可以在这方面提供帮助

你可以在一组元素上调用它并传递element whose index has to be found as an argument

var $lis = $('li.foo');
var idx = $lis.index($lis.first());//will return 0

另一种方式是传递selector as an argument然后index会根据当前元素的位置相对于元素集合返回的元素集合中元素的位置返回索引值

var $el = $('li.foo').first();
var idx = $el.index('li.foo');

至于你的问题

var $lis = $('li.foo'), $active = $('li.foo').filter('.active');
var index = $lis.index($active)

【讨论】:

  • 谢谢你。您会期望 $lis.first().index() 足以在记住过滤器的同时返回索引(因为您已经过滤了它并将其放入 $lis 中),但我想它只需要更多技巧来接收所需的输出。
猜你喜欢
  • 2013-10-03
  • 2011-10-16
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多