2009-07-18 12 views
11

में न्यूलाइन का पता लगाने में समस्या मेरे पास कुछ जावास्क्रिप्ट है जो उपयोगकर्ता द्वारा चुने गए उपयोगकर्ता के आधार पर एचटीएमएल का उपयोग करता है। वास्तविक ब्राउज़रों के लिए तरीकों मैं लाभ उठाने "रेंज" वस्तु का उपयोग कर रहा है, इस तरह के रूप में प्राप्त:जावास्क्रिप्ट रेंज ऑब्जेक्ट

var sel = window.getSelection(); 
    var range = sel.getRangeAt(0); 
    var content = range.toString(); 

सामग्री चर सभी चयनित पाठ है, जो ठीक काम करता है शामिल हैं। हालांकि मुझे लगता है कि मैं परिणामी स्ट्रिंग में न्यूलाइन का पता नहीं लगा सकता। उदाहरण के लिए:

चयनित लेख है:

एबीसी

डीईएफ़

GHI

range.toString() "abcdefghi" करने के लिए मूल्यांकन करता है।

विशेष वर्णों पर कोई भी खोज \ n \ f \ r या यहां तक ​​कि \ s का कोई उदाहरण नहीं देता है। यदि, हालांकि, मैं एक संपादन योग्य नियंत्रण में परिवर्तनीय लिखता हूं, तो पंक्ति फ़ीड फिर से मौजूद होते हैं।

क्या कोई जानता है कि मुझे क्या याद आ रहा है?

यह प्रासंगिक हो सकता है कि ये चयन और कुशलता संपादन योग्य divs पर हैं। क्रोम, फ़ायरफ़ॉक्स और ओपेरा में वही व्यवहार स्पष्ट है। आश्चर्यजनक रूप से आईई को वैसे भी पूरी तरह से अलग कोड की जरूरत है, लेकिन वहां कोई समस्या नहीं है, इसके अलावा आईई होने के अलावा।

बहुत धन्यवाद।

+0

'range.toString() मूल्यांकन "abcdefghi" से आपका क्या मतलब है? उस मूल्य की जांच करने के लिए आप क्या उपयोग कर रहे हैं? एक डीबगर? चेतावनी()? –

+0

क्या आप संपादन योग्य नियंत्रण या 'range.toString()' के लिए 'श्रेणी' मान लिख रहे हैं? – RaYell

+0

@ डेन डनलप, उपरोक्त सभी, बाहरी डिबगर्स, अलर्ट या ब्राउज़र आधारित डिबगर्स का उपयोग करते हुए। उदाहरण के लिए विजुअल स्टूडियो के साथ ब्रेकपॉइंट में मारना। @RaYell - मैंने अपनी सीमा से उत्पन्न सामग्री लिखने की कोशिश की .toString() एक संपादन योग्य div में कॉल करें, यह साबित करने के लिए कि यह नई लाइन जानकारी को बनाए रखे। पहले जवाब ने इसे दबाया, sel.toString() में नई लाइनें हैं, range.toString() नहीं है। धन्यवाद सभी। – Timbo

उत्तर

11

मेरी पोस्ट संपादित करना:

एक सा प्रयोग, मुझे लगता है कि contenteditable divs में sel.toString() रिटर्न नई लाइनों, range.toString() रिटर्न सामान्य को भी संपादित नहीं divs में सही ढंग से नई-पंक्तियों, लेकिन संपादन योग्य लोगों में नहीं है, जबकि, आप सूचना के रूप में।

हालांकि व्यवहार के लिए कोई स्पष्टीकरण नहीं मिला।

यह एक उपयोगी लिंक http://www.quirksmode.org/dom/range_intro.html

+0

उत्कृष्ट, हाँ, sel.toString() में नई लाइनें हैं। बहुत बहुत धन्यवाद! – Timbo

+1

स्पष्टीकरण सरल है और डीओएम रेंज स्पेक में रखा गया है: 'Range.toString() 'में केवल टेक्स्ट नोड्स की सामग्री शामिल है। '
'ब्लॉक तत्वों द्वारा निहित तत्वों और लाइन ब्रेक इसलिए शामिल नहीं हैं। –

+1

'document.getSelection()। ToString()' IE 11 में काम नहीं कर रहा है। यह सभी नए लाइन टेक्स्ट को एक में विलय कर रहा है। – agpt

1

मैं कम से कम दो अन्य तरीकों से पाया है, तो आप अभी भी सीमा का उपयोग कर सकते मोज़िला में कैरट की स्थिति का पता लगाने के लिए।

एक तरह से

var documentFragment = rangeObj.cloneContents(); 

जो childNodes की एक सरणी रखती कॉल करने के लिए है, और किसी भी पंक्ति विराम वर्ग के एक नोड "HTMLBRElement" के रूप में दिखाई देगा।


दूसरा तरीका यह सुनिश्चित करना है कि प्रत्येक "बीआर" टैग के बाद एक न्यूलाइन कैरेक्टर (0x0a) हो!

यह एचटीएमएल सामग्री को किसी भी दृश्यमान तरीके से चोट नहीं पहुंचाएगा, लेकिन अब सभी एचटीएमएल ब्रेक को सादे पाठ लाइन ब्रेक में अनुवाद के रूप में जल्द ही अनुवाद किया जाता है .toString() को कॉल किया जा रहा है!


मुझे उम्मीद है कि यह मदद करता है - भले ही यह विषय बहुत पुराना हो। (मैं पहले से ही एक necromancer हूँ, हेहे) :)

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