insertAfter基于ID的特定元素

时间:2012-08-28 14:36:21

标签: jquery jquery-selectors insertafter

我有两个链接列表。我有它,当用户点击任一列表上的链接时,它将被移动到另一个列表。列表很快就变得无组织了,所以我想用ID来组织它们。

我想要的是当用户点击该链接时,它将在列表中搜索data-id小于所点击链接的最后一个元素。之后我会插入元素。

现在,我真正感兴趣的是使用jQuery执行此操作的最有效(代码方式)方式。我知道我可以使用$(".added").each()来做到这一点,但看起来非常笨重。是否有更好的方法使用选择器或其他东西?

<div class="available">
    <h2>Available Groups</h2>
    <a href="" data-id="1">Group 1<span>Add</span></a>
    <a href="" data-id="2">Group 2<span>Add</span></a>
    <a href="" data-id="3">Group 3<span>Add</span></a>
    <a href="" data-id="4">Group 4<span>Add</span></a>
    <a href="" data-id="5">Group 5<span>Add</span></a>
</div>

<div class="added">
    <h2>Added Groups</h2>
</div>

目前的实施:

$(".available a").on("click",function(){
        var myID = parseInt($(this).data("id"));
        var alist = $(".added a");
        if (alist.length > 0) {
            var nodeToInsertAfter;
            $(".added a").each(function () {
                if (parseInt($(this).data("id")) < myID)
                    nodeToInsertAfter = $(this)
            });

            if (nodeToInsertAfter)
                $(this).insertAfter(nodeToInsertAfter);
            else
                $(this).prependTo(".added");
        }
        else {
            $(this).appendTo(".added");
        }
});

2 个答案:

答案 0 :(得分:1)

以下是一种方式: jsFiddle example

$(".available a").on("click", function(e) {
    e.preventDefault();
    $('.added h2').after($(this));
    var items = $('.added a').get();
    items.sort(function(a, b) {
        var A = $(a).data('id');
        var B = $(b).data('id');
        if (A < B) return -1;
        if (A > B) return 1;
        return 0;
    });
    $('.added h2').after(items);
});​

答案 1 :(得分:0)

insertAfter不是好方法,试试这个:http://api.jquery.com/appendTo/