2008-08-27 11 views
6

मैं कल डीओएम कार्यान्वयन quirks के बारे में एक चर्चा में उलझा हुआ, Text.splitText और Element.normalise व्यवहार के बारे में एक दिलचस्प सवाल उठाने के साथ, और उन्हें कैसे व्यवहार करना चाहिए।क्या डोम विभाजन करना चाहिए और पहचान देने के लिए सामान्यीकृत करना चाहिए?

DOM Level 1 Core में, Text.splitText के रूप में दो पाठ नोड्स में कम से निर्दिष्ट ऑफसेट, परिभाषित किया गया है ...

ब्रेक इस पाठ नोड दोनों भाई बहन के रूप में वृक्ष में रखते हुए। इस नोड में केवल ऑफसेट बिंदु तक सभी सामग्री शामिल होती है। और एक नया टेक्स्ट नोड, जिसे इस नोड के अगले भाई के रूप में डाला गया है, ऑफसेट बिंदु पर और उसके बाद सभी सामग्री शामिल है।

मानक के अनुसार है ...

एक "सामान्य" प्रपत्र जहां केवल मार्कअप (जैसे, टैग, टिप्पणियाँ, प्रसंस्करण में इस तत्व के नीचे उप पेड़ से भरा गहराई में सभी पाठ नोड्स रखता है निर्देश, सीडीएटीए अनुभाग, और इकाई संदर्भ) पाठ नोड्स को अलग करता है, यानी, कोई आसन्न पाठ नोड्स नहीं हैं। इसका उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि दस्तावेज़ का डीओएम दृश्य वही है जैसा कि इसे सहेजा गया था और फिर से लोड किया गया था, और जब उपयोगी ऑपरेशन (जैसे एक्सपीइंटर लुकअप) पर निर्भर करता है तो एक विशेष दस्तावेज़ वृक्ष संरचना पर निर्भर होता है।

तो, अगर मैं युक्त "नमस्ते दुनिया" एक पाठ नोड, textNode में संदर्भित लेते हैं, और कर

textNode.splitText(3) 

textNode अब सामग्री "हैलो" है, और एक नया भाई युक्त "दुनिया"

अगर मैं तो

textNode.parent.normalize() 

textNode क्या है? विनिर्देश यह स्पष्ट नहीं करता है कि टेक्स्ट नोड को अभी भी इसके पिछले माता-पिता का बच्चा होना है, बस सभी आसन्न टेक्स्ट नोड्स (जिन्हें हटाया जाता है) को शामिल करने के लिए अपडेट किया गया है। ऐसा लगता है कि सभी आसन्न पाठ नोड्स को हटाने के लिए एक conforment व्यवहार होना प्रतीत होता है, और उसके बाद मूल्यों के संयोजन के साथ एक नया नोड फिर से बनाते हैं, जिससे टेक्स्ट नोड उस चीज़ को इंगित करता है जो अब पेड़ का हिस्सा नहीं है। या, हम textNode को उसी प्रारूप में अपडेट कर सकते हैं जैसे splitText में, इसलिए यह इसकी पेड़ की स्थिति को बरकरार रखता है, और एक नया मान प्राप्त करता है।

व्यवहार की पसंद वास्तव में काफी अलग है, और मुझे स्पष्टीकरण नहीं मिल रहा है, जो सही है, या यदि यह विनिर्देशन में केवल एक निरीक्षण है (यह स्तर 2 या 3 में स्पष्ट नहीं है)। क्या कोई डोम/एक्सएमएल गुरु वहां कुछ प्रकाश डाल सकता है?

उत्तर

3

मैं शुरुआती दिनों में डोम वर्किंग ग्रुप पर था; मुझे यकीन है कि हम मतलब textNode नया शामिल हो गए मान होना चाहिए के लिए हूँ, लेकिन अगर हम ऐसा नहीं किया कहना कल्पना में यह, यह संभव है कि कुछ कार्यान्वयन बजाय textNode पुन: उपयोग का एक नया नोड बना सकता है, हालांकि इसे कार्यान्वयन करने वालों के लिए अधिक काम की आवश्यकता होगी।

संदेह में, प्रोग्राम रक्षात्मक रूप से।

1

हालांकि यह एक उचित धारणा की तरह प्रतीत होता है, मैं मानता हूं कि यह विनिर्देश में स्पष्ट रूप से स्पष्ट नहीं है। मैं जो भी जोड़ सकता हूं वह यह है कि जिस तरह से मैंने इसे पढ़ा है, textNode में से एक या यह नया भाई है (यानी splitText से वापसी मूल्य) में नया जुड़ाव मूल्य होगा - कथन निर्दिष्ट करता है कि उप-पेड़ में सभी नोड्स डाल दिए गए हैं सामान्य रूप, यह नहीं कि उप-पेड़ को एक नई संरचना के लिए सामान्यीकृत किया गया है। मुझे लगता है कि सामान्यकरण से पहले माता-पिता का संदर्भ रखना एकमात्र सुरक्षित बात है।

1

मुझे लगता है कि सभी दांव यहां हैं; मैं निश्चित रूप से किसी दिए गए व्यवहार पर निर्भर नहीं होगा। करने के लिए एकमात्र सुरक्षित बात यह है कि नोड को अपने माता-पिता से फिर से प्राप्त करें।

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

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