2010-04-16 9 views
32

मैंने सुना है कि el.innerText||el.textContent का उपयोग कर अविश्वसनीय परिणाम प्राप्त हो सकते पुन: प्राप्त करने बनाम, और यही कारण है कि मैं हमेशा अतीत में निम्नलिखित फ़ंक्शन का उपयोग करने पर जोर दिया गया है:innerText/textContent प्रत्येक पाठ नोड

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; 

} 

इस समारोह किसी तत्व के भीतर सभी नोड्स के माध्यम से जाता है और सभी टेक्स्ट नोड्स का पाठ एकत्र करता है, और वंश के भीतर पाठ:

ईजी

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

परिणाम:

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

मैं काफी यकीन है कि वहाँ innerText और textContent उपयोग करने के साथ मुद्दे हैं, लेकिन मैं कहीं भी एक निश्चित सूची ढूँढने में सक्षम नहीं किया गया है और मैं शुरू कर रहा हूँ आश्चर्य है कि यह सिर्फ हैर्स है।

क्या कोई भी टेक्स्ट सामग्री/आंतरिक टेक्स्ट की संभावित विश्वसनीयता की कमी के बारे में कोई जानकारी प्रदान कर सकता है?

संपादित: Kangax द्वारा इस महान जवाब मिला - 'innerText' works in IE, but not in Firefox

+0

इतना आसान और बहुत उपयोगी! '3' के बजाय' document.TEXT_NODE' के बारे में कैसे? क्या यह पुराने ब्राउज़र में समर्थित नहीं है? – stackunderflow

उत्तर

33

यह endlines और रिक्त स्थान को बारे में सब है - ब्राउज़र विशेष रूप से इंटरनेट एक्सप्लोरर में हां, तो इस संबंध में बहुत असंगत हैं। ट्रैवर्सल करना सभी ब्राउज़रों में समान परिणाम प्राप्त करने का एक निश्चित-अग्नि तरीका है।

+0

धन्यवाद जॉन। मुझे आश्चर्य है कि नेट पर कहीं और इस समस्या का कोई उल्लेख नहीं है ... यहां तक ​​कि QuirksMode इसका उल्लेख नहीं करता है। – James

+14

ट्रैवर्सल सभी ब्राउज़रों में एक ही परिणाम की गारंटी नहीं देता है। उदाहरण के लिए, आईई (अन्य ब्राउज़रों के विपरीत) में '

संबंधित मुद्दे