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,通常不需要这样做。