2014-06-13 18 views
6

kemanhttp://jsfiddle.net/Q8F5u/3/Geri Al (Ctrl + z) geri gizli div'leri

Ben birden div'leri, her aslında ben zorunda (a o belirli div silmek için kendi üstündeki düğmeye silmek zorunda olması getirmek için işlevsellik gizlenmeyin). div'ler olmuştur sonra geri basarak bunları istediğiniz silinen CTRL + Z onları geri getirmekte bazı başarılar oldu

. i kullandım Mantık, ben yığını den son gizli div kimliğinin haşhaş ve bu kimliği kullanarak duyuyorum i Ctrl + Z tuşlarına am her bir yığın- silinmiş div'leri id en bastırıyor ve olmamdır Gizli div'i geri getir.

İşte javascript

:

var deletedBlocks = []; 

$('.delete').on('click',function(){ 
    var deletedid = $(this).closest('div[id^=block]').attr('id'); 
    deletedBlocks.push(deletedid); 
    $(this).closest('div[id^=block]').fadeOut(500); 


}); 

$('body').on('keydown',function(e){ 
    //check for ctrl + z key 

    if(e.ctrlKey && e.which == 90){ 

     if(deletedBlocks.length > 0){ 

      var lastdeleted = deletedBlocks.pop(); 
      $('.container').children('#'+ lastdeleted).fadeIn(1000); 
    } 
     else{ 
      alert('NO further Shift to be retrieved'); 
     } 
    } 

}); 

sorun i yaşıyorum benim gerçek uygulamada bu div için böyle bir benzersiz kimlik orada olmasıdır. bunun yerine hepsinin aynı sınıfları var. Divanın benzersiz kimlikleri olmadan aynı işlevselliği nasıl uygularım?

+0

Sadece onlara benzersiz bir kimlik verin. Önek içeren basit bir sayaç yeterlidir, "div0", "div1", "div2" vb. Gibi. – Halcyon

+0

Bunu yapabileceğimi biliyorum. Ama bilmek istediğim başka bir yol var mı? –

+0

Evet, kimlikleri kullanmanıza gerek yoktur. Bunları DOM’tan gerçekten kaldırmıyor olmanızdan ziyade DOM öğelerine başvurularda kalabilirsiniz. – Halcyon

cevap

5

Yalnızca div'leri gizliyorsanız, div 'i bir ID yerine yığına itebilirsiniz.

$('.delete').on('click',function(){ 
    var deleted = $(this).closest('div[id^=block]'); 
    deletedBlocks.push(deleted); 
    deleted.fadeOut(500); 
}); 

$('body').on('keydown',function(e){ 
    //check for ctrl + z key 

    if(e.ctrlKey && e.which == 90){ 

     if(deletedBlocks.length > 0){ 

      var lastdeleted = deletedBlocks.pop(); 
      lastdeleted.fadeIn(1000); 
     }else{ 

      alert('NO further Shift to be retrieved'); 
     } 
    } 

}); 

Not, ben sadece kodunuzu yeniden düzenledim. Test etmedi. Ama sen fikrini al ve işe yaramalısın.

+0

Awesome ... Çok teşekkürler! http://jsfiddle.net/Q8F5u/4/ –

+0

Sorun değil! Eğer çalışıyorsa, lütfen cevap üzerindeki onay işaretini vurmayı unutmayın :) – rescuecreative

1

jQuery'nin .eq() ve .index() yöntemlerini kullanabilirsiniz.

var deletedid = $(this).closest('div[id^=block]').attr('id'); 

Silinen öğelerin dizinini almak olabilir:

var deletedIndex = $(this).closest('div[id^=block]').index(); 

saklayın dizide bu endeks ve doğru elemanı silinmesini iptal etme sonrası) (.eq kullanın doğrultusunda

:

$('.container').closest('div[id^=block]').eq(lastdeleted).fadeIn(1000); 
+0

Evet ... index() ayrıca benzersiz bir özellik olarak da hizmet verebilir !!! –

İlgili konular