定义新:当前一个被移除/移动后的第一个孩子

时间:2015-07-08 12:30:11

标签: javascript jquery

我有一个函数可以从一个有序列表中删除列表元素,然后在当前一个列表之后找到所有有序列表,获取它们的第一个元素并将其附加到前一个列表中。

问题:如果我从任何列表中删除第一个元素或者附加函数停止工作,我相信它是由于jQuery记住第一个元素是什么,因为它不再在它的位置它找不到它,但是它应该只是重新定义/查找当前第一个孩子的特定列表中的新元素。这是功能:

function removeQueueItem(element) {
    //Get ordered list of removed list element
    var itemMonth = element.parents().eq(2); //li.queue-month
        //Get all following lists
        nextMonths = itemMonth.nextAll('.queue-month');

    //Fade out removed element
    element.parent().fadeOut(function(index){
        //Remove element from DOM
        element.remove();

        nextMonths.each(function(index) {
            //Check if next month has socks
            if($(this).find('.item-dragable').length > 0) {
                var firstItem = $(this).find('.item-dragable:first-child');
                $(this).prev().find('ol').append(firstItem);
            }
        });
    });
}

JsFiddle - 删除9月份的第一件商品,然后在8月份删除任何商品,9月份的第一件商品应该变成粉红色,但不会发生。这就是问题所在。

2 个答案:

答案 0 :(得分:5)

因为您要移除a代码而不是li代码。因此,当您搜索:first-child时,它就在那里,但您没有看到它。 为了使其工作,您需要更改代码:

element.parent().fadeOut(function(index){
    //Remove element from DOM
    element.remove(); <-- here

    ...
});

要:

element.parent().fadeOut(function(index){
    //Remove element from DOM
    $(this).remove(); <-- element to $(this)

    ...
});

JSFiddle

答案 1 :(得分:2)

那是因为它是parent你逐渐淡出,但内在element你正在消失。您的.item-dragable元素仍然存在,最终其display属性设置为none。这意味着它仍然是第一个孩子。

Example Before

...变为:

Example After

要解决此问题,只需更改:

element.remove()

...为:

element.parent().remove()

JSFiddle demo