jQuery切片和单击事件
时间:2020-03-05 18:47:37 来源:igfitidea点击:
这可能是一个非常简单的jQuery问题,但是在文档中10分钟后我无法回答。
我有一个复选框列表,我可以使用选择器'input [type = checkbox]'来获得它们。我希望用户能够按住Shift并单击并选择一系列复选框。为此,我需要获取列表中一个复选框的索引,因此可以将该索引传递给
.slice(start,end)`。用户单击框时如何获取索引?
解决方案
回答
以下选择器也应在jQuery中工作:input:checkbox
。
然后,我们可以将:gt(index)
和:lt(index)
过滤器一起串起来,因此,如果我们想要第5至第7个复选框,则可以使用input:checkbox:gt(4):lt(2 )
。
要获取当前单击复选框的索引,只需使用$(" input:checkbox")。index($(this))
。
回答
这是一个快速的解决方案,但是我会给每个复选框一个唯一的ID,也许带有索引提示,如下所示:
<input id="checkbox-0" type="checkbox" /> <input id="checkbox-1" type="checkbox" /> <input id="checkbox-2" type="checkbox" /> <input id="checkbox-3" type="checkbox" /> <input id="checkbox-4" type="checkbox" />
然后,我们可以轻松获取索引:
$(document).ready(function() { $("input:checkbox").click(function() { index = /checkbox-(\d+)/.exec(this.id)[1]; alert(index); }); });
回答
谢谢你的回答,萨姆森(Samjudson)。
经过进一步的实验,我发现我们甚至可以只使用$(':checkbox')来选择它们。有趣的是,我们可以使用.slice()函数来获取范围,但是我们也可以选择使用
:gt和
:lt在选择器中进行选择。我确实发现
.slice()`的语法比使用选择器过滤器更干净。
我不得不说,我不太喜欢Ryan Duffield的解决方案,因为它需要更改标记并涉及重复代码。
回答
@Gorgapor:我想有时候我需要减少一些字面上的问题。 :-)我认为我们被限制在需要某种索引的位置。我想我们会发现,随着我们更多地使用jQuery,通常不需要这样做。