Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义新:删除/移动当前子项后的第一个子项_Javascript_Jquery - Fatal编程技术网

Javascript 定义新:删除/移动当前子项后的第一个子项

Javascript 定义新:删除/移动当前子项后的第一个子项,javascript,jquery,Javascript,Jquery,我有一个函数,它从一个有序列表中删除列表元素,然后查找当前列表之后的所有有序列表,获取它们的第一个元素并将其附加到前一个列表中 问题是:如果我从任何列表中删除第一个元素,或者它被追加,函数停止工作,我相信这是由于jQuery记住了第一个元素是什么,并且由于它不再在它的位置上,所以它找不到它,但是它应该在特定的列表中重新定义/查找当前第一个子元素。以下是函数: function removeQueueItem(element) { //Get ordered list of removed

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

问题是:如果我从任何列表中删除第一个元素,或者它被追加,函数停止工作,我相信这是由于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);
            }
        });
    });
}

-在9月删除第一个项目,然后在8月删除任何项目,9月的第一个项目应为粉红色,但不会发生。这就是问题所在。

这是因为您正在淡出的是
父元素,而您正在删除的是内部
元素。您的
.item dragable
元素仍然存在,并且其
display
属性设置为
none
。这意味着它仍然是第一个孩子

…变成:

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

element.remove()
…致:

element.parent().remove()

.

因为您正在删除
a
标记,而不是
li
标记。所以当你搜索第一个孩子时,它就在那里,但你看不到它。 为了使其正常工作,您需要从以下位置更改代码:

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

    ...
});
element.parent().fadeOut(函数(索引){
//从DOM中删除元素

元素。删除();请添加一个JSFIDLE,我们需要将标记视为well@YotamOmer添加到,只需从一个月中删除一个项目,您将看到下一个月中的第一个项目变为粉红色,删除粉红色项目,然后再次从第一个月中删除任何项目,此功能不起作用anymore@YotamOmer在9月移除第一个项目,在8月移除任何项目后,Fi九月份的第一个项目应该变成粉红色,但对我来说不是这样。@YotamOmer如果你之前不删除第一个项目,它就会工作,但是它也应该在之后查找新的第一个项目。为了更好的可伸缩性,最好使用
$(这)
解决元素问题,这比我的答案更好;我甚至没有考虑使用
$(这)
-我肯定对jQuery!+1有些生疏了
element.parent().fadeOut(function(index){
    //Remove element from DOM
    $(this).remove(); <-- element to $(this)

    ...
});