2010-04-16 8 views
32

el.innerText||el.textContent kullanmanın güvenilmez sonuçlar doğurabileceğini duydum ve bu yüzden geçmişte aşağıdaki işlevi kullanmakta ısrar ettim:innerText/textContent ve her bir metin düğümünü alma

function getText(node) { 

    if (node.nodeType === 3) { 
     return node.data; 
    } 

    var txt = ''; 

    if (node = node.firstChild) do { 
     txt += getText(node); 
    } while (node = node.nextSibling); 

    return txt; 

} 

Bu fonksiyon bir eleman içindeki tüm düğümlerden geçer ve metni toplar tüm metin düğümleri ve metinlerin içindeki metinler:

Örn.

getText(document.getElementById('x')); // => "foo foo... foo" 

oldukça varım innerText ve textContent kullanımı ile ilgili sorunlar var, ama herhangi bir yerde kesin bir liste bulamadık ve başlıyorum sadece hearsay olup olmadığını merak ediyorum.

Herkes textContent/innerText'in olası güvenilirliği hakkında herhangi bir bilgi sunabilir mi?

EDIT: Bu harika cevabı Kangax buldum - 'innerText' works in IE, but not in Firefox

+0

Çok basit ve kullanışlı! '3' yerine document.TEXT_NODE' ne dersiniz? Daha eski tarayıcılarda bu desteklenmiyor mu? – stackunderflow

cevap

33

Bu dip çizgilere ve boşluk olacak - tarayıcılar özellikle Internet Explorer yüzden, bu konuda çok tutarsız. Geçiş yapmak, tüm tarayıcılarda aynı sonuçları elde etmek için kesin bir yoldur.

+0

Teşekkürler John. Şimdiye kadar net bir şekilde bu problemden hiç bahsetmemeye şaşırdım ... hatta QuirksMode bile bundan bahsetmiyor. – James

+14

Traversal, tüm tarayıcılarda aynı sonuçları garanti etmez. Örneğin, IE'de (diğer tarayıcılardan farklı olarak) '

İlgili konular