jquery
  • setinterval
  • event-delegation
  • 2017-03-01 45 views 0 likes 
    0

    我有一個div,我希望能夠將子元素添加到頂部並從底部動態刪除子元素。有點像rss ticker。 母公司不斷有新的孩子。 有一個條件可以測試孩子的數量,然後在最後一個孩子達到所需的最大長度的孩子時將其刪除。 這是通過setInterval()完成的。刪除最後發生的動態創建的div

    setInterval(function(){ 
        var newbox = "<div class='child animated bounceInDown'></div>" 
        $(newbox).prependTo('#container').hide().slideDown(500); 
        var dlength = $('.child').length; 
        console.log(dlength); 
    
        if (dlength >=5){ 
         $(".child:last").fadeOut(); 
        } 
    }, 2000); 
    

    目前與我的代碼,我可以刪除最後一個子div通過使用填充最大所需長度的父div的計數器。

    問題是它只在第一個時間間隔內刪除最後一個div。 我將計數記錄到控制檯並可以看到計數增量,所以我的情況應該會觸發。

    我的想法是,我的問題是由於沒有事件代表團。實質上,當我嘗試刪除它時,div不在DOM中。話雖如此,我不確定是否需要聽父母的事件或附加處理程序。 任何想法?

    這裏是小提琴例如:

    http://jsfiddle.net/luskbo/tcq8kuy6/9/

    +0

    更新正確的撥弄鏈接^ – luskbo

    +0

    '$( '#集裝箱.child')EQ($( '#集裝箱.child')的長度 - 1)一個.remove();'檢查這 –

    回答

    1

    問題是你一直淡出在DOM的最後一個元素,而不是最後一個可見的元素。就像說,你總是在淡化同樣的元素。

    $(".child:visible:last").fadeOut();應該的技巧。(它在JSFiddle中工作)添加:visible選擇器。

    Anant建議的另一種選擇是從DOM中刪除元素,而不是將其刪除,這取決於您可能想要實現的內容。如果你不需要元素留在DOM中,也許這是一個很好的做法,將其刪除。 。

    $(".child:visible:last").fadeOut(400,function(){ 
        $(this).remove(); 
    }); 
    
    +0

    謝謝!這正是我所期待的。阿南特的回答很接近,但沒有我試圖實現的淡出。 – luskbo

    相關問題