2015-06-01 4 views
0

Я пытаюсь динамически удалять li элементы с HTML-страницы, я использую метод .remove(), но если я проверяю HTML-страницу, я вижу, что этот элемент НЕ удаленный, он просто изменил свою видимость на display: none;. Есть ли способ, которым я могу ОПРЕДЕЛЕННО удалить элемент со страницы?jQuery .remove() не удаляет элемент

это фрагмент (я клонировать li из #ul1 и добавить его в #ul2):

var oggettoClone = $(this).clone(); 
oggettoClone.appendTo("#ul2"); 

$(oggettoClone).bind({ 
    click: function(o) { 

     var r = confirm("Remove this element?"); 
     if (r == true) 
     { 
      $(this).slideUp(); 

      setTimeout(function(){ 
       $(this).remove(); 
      }, 2000); 
     } 

    } 
}); 
+0

вы можете воспроизвести его в www.jsfiddle.net? – AmmarCSE

+1

.remove() делает то, что он говорит на олове, он удаляет элемент из дерева DOM и все, что было внутри него. –

+0

Осмотрите в источнике просмотра, правильно? – Dreamweaver

ответ

1

причина в том, что это не работает, потому что вы вызываете $(this) внутри подфункции setTimeout. Вы должны определить элемент как переменную для доступа к ней внутри подфункции.

$(oggettoClone).bind({ 
    click: function(o) { 
     var r = confirm("Remove this element?"); 
     var t = $(this); 
     if (r == true) { 
      $(t).slideUp(); 
      setTimeout(function(){ 
       $(t).remove(); 
      }, 2000); 
     } 

    } 
}); 

или следовать советам Анди и использовать .sideUp() «s вариант обратного вызова:

$(oggettoClone).bind({ 
    click: function(o) { 
     var r = confirm("Remove this element?"); 
     if (r == true) { 
      $(this).slideUp(function(){ 
       $(this).remove(); 
      }); 
     } 
    } 
}); 
1

Используйте "полный" обратного вызова функции из slideUp (http://api.jquery.com/slideup/)

$(this).slideUp(function(){ 
    // this part will execute when slideUp is complete. 
    $(this).remove(); 
});