2013-10-25 51 views
1

查看小提琴here中的行爲。刪除動態創建的頁面元素

$(document).ready(function() { 
      $('.tile').draggable(); 
      $('.tile').on('dragstart', function() { 
       var numClones = $('.tile').length - 1 
       if (numClones > 0) { 
        //why can't I use fadeOut or empty here? 
        //make sure we don't remove the clone before it's made 
        $('.tile')[numClones].remove(); 
       } 
       console.log(numClones); 
       var clone = $(this).clone(); 
       clone.appendTo('body'); 
      }); 
     }); 

這允許用戶在拖動事件上創建頁面元素的克隆。它也刪除了以前的克隆。在上面的註釋行中,當我嘗試使用fadeOut從頁面中刪除div時,爲什麼會出現錯誤?這是一個jQuery對象,對吧?我得到的錯誤Object #<HTMLDivElement has no method fadeOut

+0

否; '$('。tile')[numClones]'是DOM節點本身,而不是一個jQuery對象。 – Mathletics

+0

最初的'.tile'應該被刪除嗎? – Mathletics

回答

2

jQuery元素的索引訪問器(簡寫爲get(index))返回DOM元素。你正在尋找jQuery元素,在這種情況下,你應該使用.eq(index)(這個沒有簡寫)。

remove()工作的唯一原因是因爲it is also a DOM element method

$('.tile').eq(numClones).fadeOut(function() { 
    // make sure the old clones get deleted, not just hidden 
    $(this).remove(); 
}); 

http://jsfiddle.net/2rnSk/1/

+0

我有這個相同的答案,我的downvoted。到底是怎麼回事? – Mathletics

+0

@Mathletics不確定,不是我。 – wootscootinboogie

+1

@jbabey:這就是我一直在尋找的東西。謝謝。 – wootscootinboogie

-1

嘗試這種情況:

$($('.tile')[numClones]).fadeOut(); 

甲jQuery對象僞裝成元件其選擇器的匹配的陣列。當您應用索引時,您將返回一個HTMLDivElement。但是,如果你把它包裝在一個jQuery對象中,你應該可以毫無問題地應用fadeOut

+0

有很多方法可以選擇你想要的項目,而不必重新包裝jQuery。 – Mathletics

+0

確實如此,但是OP想知道他爲什麼會遇到錯誤。雖然有更多最佳解決方案,但我覺得這個特別的解釋更好地解釋了爲什麼他的代碼失敗了。 –