首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQuery:如何对jquery添加的列表项进行重新排序?

JQuery:如何对jquery添加的列表项进行重新排序?
EN

Stack Overflow用户
提问于 2013-05-06 04:46:46
回答 2查看 148关注 0票数 1

我在这里找到了一个很好的重新排序列表项的方法。

代码语言:javascript
复制
$(".reOrder li").click(function() {
       var index = $(".reOrder li").index(this);
       if (index != 0) {
          // li item is not sitting in the first position
          $(".reOrder li:eq(" + (index - 1) + ")").before(this);
       }
       });

问题是,我有通过jQuery的append方法添加到UL的LI项,而点击似乎没有为这些项注册。Here's a simplified fiddle showing what I mean。请注意原始列表项是如何正常工作的,但如果您添加了一个列表项,则单击该列表项将不起作用。

我甚至尝试了一个简单的点击提醒,所以它没有得到点击事件。我需要如何更改我的代码才能使其工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-06 04:51:52

您的示例代码使用了一个类,实际上,它是一个ID,但我猜您知道这一点。

与代码中的事件处理程序一样,事件处理程序只对绑定事件时存在于页面上的元素起作用。在添加元素时,这些元素是动态的,您需要一个委托的事件处理程序,其中事件被绑定到非动态的父级,并检查第二个选择器,在本例中为li

代码语言:javascript
复制
$(".reOrder").on('click', 'li', function() {
     var index = $(".reOrder li").index(this);
     if (index != 0) {
        // li item is not sitting in the first position
        $(".reOrder li:eq(" + (index - 1) + ")").before(this);
     }
});

这在你的小提琴中使用的jQuery 1.4版本中不起作用,你应该升级到新版本。

票数 2
EN

Stack Overflow用户

发布于 2013-05-06 05:03:59

根据jQuery文档

> Event handlers are bound only to the currently selected elements; they must exist on the page at the time your code makes the call to .on().

同时也要注意你在小提琴上使用的jQuery的版本(1.4.2没有.on() )。最好是使用委托

http://api.jquery.com/delegate/

根据jQuery文档

Deletegate()描述:基于一组特定的根元素,将一个处理程序附加到与选择器匹配的所有元素的一个或多个事件。

或者,您可以尝试不附加到li项的click事件,而是附加到父ul (总是在那里),然后测试目标(即单击了哪个li )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16388986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档