2008-10-22 14 views
6

Şu anda jt çerçevelerimiz olarak prototip ve jQuery kullanıyoruz. Şu anda jQuery, prototipten kaynaklanan çakmaları önlemek için j() $ 'a ayarlandı.Prototip veya jQuery'yi kullanarak .lastChild'i uygulamanın en iyi yolu

Geçmişte, DOM'yi geçmek için çok sayıda prototipin Element.down(), Element.next() ve Element.previous() yöntemlerini kullandık. Bununla birlikte, son çocuk elemanını almanın basit bir yoluna ihtiyacım var. Element.childElements() yöntemini kullanarak bir diziden geçebileceğimi biliyorum, ancak temiz bir şekilde okunan ve pipeline edilebilen satır içi bir şey istiyorum.

Tekerleği yeniden icat etmeden önce sormam gerektiğini düşündüm.

_find : function(rows, address) { 
     var obj = null; 
     for (var i=0; i < rows.length && obj == null; i++) { 
      if (rows[i].down().className == 'b') 
       obj = this._find(rows[i].lastChild.down().down().childElements(), address); 
      else if (rows[i].lastChild.getAttribute('tabAddress') == address) 
       return rows[i].lastChild; 
     } 
     return obj; 
    } 

cevap

21

Çocuklar, seçici fonksiyonların eleman dizilerini döndürdüğüne dikkat edin (tek elemanlar değil), böylece sonuç dizisindeki öğeyi indeksle eklemelisiniz: [0].

var element = document.getElementById("parent"); 
var lastChild = element.childNodes[element.childNodes.length - 1]; 

Ayrıca üst öğe hiçbir çocuğu varsa bu boş dönebilirsiniz unutmayın javascript prototip

Kod düz vanilya içinde

//if you only have the id of the parent 
var lastChild = $$("#parent :last-child")[0]; 
//or 
//if you have the actual DOM element 
var lastChild = $(element).select(":last-child")[0]; 

Kod jQuery içinde

//if you only have the id of the parent 
var lastChild = $("#parent :last-child")[0]; 
//or 
//if you have the actual DOM element 
var lastChild = $(":last-child", element)[0]; 

Kodu düğümler. Herkes Prototip ile, onların soruyu cevaplamak için web'de arama esnasında buna bulur durumda

1

kullanabileceğiniz

var lastChild = $("#parent :last-child"); 

http://docs.jquery.com/Selectors/lastChild

+0

Ebeveynin kimlik değeri yoksa ne olur? – taco

+0

Evet, bu snipet öğesinin ana öğe değil de ebeveyn kimliğine sahip olacağını düşünüyorum –

1

Prototip kullanarak jQuery her zaman benim için çalıştı bu deneyin: İşte değiştirilmesi gerektiğini İçinde lastChild olan bir kod parçacığı İşte 0 CSS3 sözdiziminin çoğunu destekleyen $$ yardımcı programı işlevi:

0

Yapabileceğiniz:

Element.childElements().last(); 
0

hala prototip kullanır başkasının Başvuru için, Sen özel öğe yöntemleri ekleyebilirsiniz:

Element.addMethods({ ... });

Ben diğerleri arasında bu ikisini ekledi: zincirleme zaman

first: function(element) { 
    element = $(element); 
    return element.childElements()[0];  
}, 
last: function(element) { 
    element = $(element); 
    var i = element.childElements().size() - 1; 
    return element.childElements()[i]; 
} 

var first = $('foo').first(); 
var last = $('foo').last(); 

Element.first() yöntem çeşit gereksiz, ben daha temiz görünümlü kod için kullanabilirsiniz.

Zincirlemeyi etkinleştirmek için reutrn element emin olun.

İlgili konular