Pertanyaan innerText / textContent vs. mengambil setiap simpul teks [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Saya pernah mendengar bahwa menggunakan el.innerText||el.textContent dapat menghasilkan hasil yang tidak dapat diandalkan, dan itulah mengapa saya selalu bersikeras menggunakan fungsi berikut di masa lalu:

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;

}

Fungsi ini melewati semua node dalam suatu elemen dan mengumpulkan teks dari semua node teks, dan teks dalam turunan:

Misalnya.

<div id="x">foo <em>foo...</em> foo</div>

Hasil:

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

Saya m cukup pasti ada masalah dengan menggunakan innerText dan textContent, tetapi saya belum dapat menemukan daftar definitif di mana saja dan saya mulai bertanya-tanya apakah itu adil kabar angin.

Adakah yang bisa menawarkan informasi tentang kemungkinan kurangnya keandalan textContent / innerText?

EDIT: Temukan jawaban bagus ini dari Kangax - 'innerText' berfungsi di IE, tetapi tidak di Firefox


32
2018-04-16 14:27


asal


Jawaban:


Ini semua tentang endline dan whitespace - browser sangat tidak konsisten dalam hal ini, terutama di Internet Explorer. Melakukan traversal adalah cara yang pasti untuk mendapatkan hasil yang identik di semua browser.


33
2018-04-16 15:02