2012-02-07 15 views
13

मैं एक बुकमार्कलेट लिखने की कोशिश कर रहा हूं जो दस्तावेज़ पर दृश्यमान पाठ के सभी उदाहरणों पर फ़ंक्शन doSomething(textNode) पर कॉल करता है।सभी टेक्स्ट नोड्स खोजें

doSomething(), बस मस्ती के लिए, पाठ को प्रतिस्थापित करके टेक्स्ट "टेक्स्ट" को प्रतिस्थापित करके "डरप" के साथ प्रत्येक शब्द को प्रतिस्थापित करता है। हालांकि, यह कुछ टेक्स्ट नोड्स बनाता है जो उनमें शब्दों के लिए खाली हैं, इसलिए यह वेब पेज को तोड़ देता है।

क्या doSomething() पर कॉल करने का कोई तरीका है जिसमें केवल प्रत्येक टेक्स्ट नोड में शब्द हैं?

function recurse(element) 
{ 
    if (element.childNodes.length > 0) 
     for (var i = 0; i < element.childNodes.length; i++) 
      recurse(element.childNodes[i]); 

    if (element.nodeType == Node.TEXT_NODE && element.nodeValue != '') 
     doSomething(element); 
} 
var html = document.getElementsByTagName('html')[0]; 
recurse(html); 

उत्तर

10

बदलें इस ...

element.nodeValue != '' 

यह करने के लिए ...

/\S/.test(element.nodeValue) 

यह /\S/ regex है, जो कम से कम एक गैर अंतरिक्ष चरित्र की खोज करता है उपयोग करता है।

आपको "शब्दों" से आगे क्या मतलब है, इसे परिभाषित करने की आवश्यकता हो सकती है। मैंने इसका मतलब यह लिया कि आप केवल व्हाइटस्पेस-केवल नोड्स को छोड़ रहे हैं।


एक वैकल्पिक

ब्राउज़रों कि समर्थन String.prototype.trim में, यह हो सकता है ...

element.nodeValue.trim() != '' 
संबंधित मुद्दे