2010-10-19 8 views
11

यह बहुत अजीब है। जाहिर है, मैं textarea पाठ में हेरफेर करने के लिए .val() और .text() दोनों का उपयोग कर सकता हूं।Textarea: elem.val() बनाम elem.text()

लेकिन जब मैं टेक्स्ट बदलने के लिए .val का उपयोग करता हूं, तो मैं अब .text का उपयोग नहीं कर सकता। इसका उलट सत्य नहीं है।

यह कुछ भयानक बग का कारण बन रहा है। इसका कारण यह है कि मैं जिस प्लगइन का उपयोग कर रहा हूं वह पाठ का उपयोग करने के लिए .val का उपयोग कर सकता है।

क्या कोई यह समझा सकता है कि यह कैसे काम करता है? धन्यवाद!

उत्तर

8

आपको val(), या (बेहतर) value टेक्स्टरेरा की संपत्ति का उपयोग करना होगा। text() प्रारंभ में काम करता है क्योंकि टेक्स्टरेरा का प्रारंभिक मान टेक्स्ट नोड (यदि कोई है) द्वारा निर्धारित किया जाता है। आप प्रारंभ में इस पाठ नोड की nodeValue या data संपत्ति को भी बदल सकते हैं और यह टेक्स्टरेरा के मान को अपडेट करेगा। हालांकि, जैसे ही उपयोगकर्ता ने टेक्स्टरेरा या स्क्रिप्ट के मान को बदल दिया है, value टेक्स्टरेरा की संपत्ति को बदल दिया है, टेक्स्ट नोड तस्वीर से बाहर है और अब किसी भी तरह से टेक्स्टरेरा के मूल्य से जुड़ा हुआ नहीं है।

+1

ग्रेट स्पष्टीकरण। आपका क्या मतलब है "टेक्स्ट नोड तस्वीर से बाहर है" - आपका मतलब है कि टेक्स्टनोड शुरू में टेक्स्टरेरा से जुड़ा हुआ है? –

+0

हां, यह बिल्कुल ठीक है।प्रारंभ में, टेक्स्ट नोड को बदलना टेक्स्टरेरा के मान को बदल देगा, लेकिन एक बार मूल्य को किसी अन्य माध्यम से बदल दिया गया है (उपयोगकर्ता इनपुट या स्क्रिप्ट 'वैल्यू' प्रॉपर्टी बदल रहा है), टेक्स्ट नोड को बदलना अब मूल्य पर कोई प्रभाव नहीं पड़ेगा । 'मूल्य' संपत्ति को बदलने से टेक्स्ट नोड पर कभी भी कोई प्रभाव नहीं पड़ता है। –

7

.val() फ़ंक्शन <textarea> तत्व की "मान" विशेषता प्राप्त करता है, जबकि .text() तत्व में टेक्स्ट नोड्स (नोड प्रकार 3) की सामग्री प्राप्त करता है। मैं कहूंगा कि यदि .text() सेटिंग बिल्कुल काम करती है, तो यह एक अच्छा विचार नहीं है, क्योंकि यह अनिवार्य रूप से पदार्थ के बुनियादी निर्माण खंडों के साथ बेवकूफ़ बना रहा है। यह एक बग, या एक ब्राउज़र दुर्घटना, या एक विनाशकारी विस्फोट का कारण बन सकता है।

.val() का उपयोग करें।

संपादित.text() बिंदु है जिस पर एक उपयोगकर्ता <textarea> तत्व के साथ सूचना का आदान प्रदान, या जावास्क्रिप्ट कोड "मूल्य" संपत्ति सेट अप करने के लिए काम करता है। उस बिंदु के बाद, तत्व की डीओएम सामग्री अप्रासंगिक हो जाती है। आप अभी भी इसे प्राप्त कर सकते हैं, लेकिन यह तत्व की वास्तविक स्थिति को प्रतिबिंबित नहीं करेगा।

+0

भयानक स्पष्टीकरण! और ... "पदार्थ के मूल निर्माण खंड", "विनाशकारी विस्फोट" - क्या आप प्रशिक्षण के द्वारा एक भौतिक विज्ञानी थे? ;) –

+4

नहीं, मैं बस बहुत सारे टीवी देखता हूं – Pointy

1

अजीब लगता है, लेकिन निचले स्तर पर, .val() वह है जो मैं काम करने की उम्मीद कर रहा हूं। अंतराल तत्वों की सामग्री तक पहुंचने का तरीका है। क्यों .text() कुछ मामलों में काम कर रहा है मुझे धड़कता

+1

इसे आपको हरा नहीं है। टेक्स्टरेरा में भिन्न हो सकता है, उदा। इनपुट, सीडीएटा (टेक्स्टनोड)। और यह है, क्या पाठ() पाठ पुनर्प्राप्त करेगा ... textnodes। –

+0

आह, यह समझाएगा। सबसे अधिक संभावना है कि एक कॉल टू वैल ('डमी') किसी भी टेक्स्टनोड को ओवरराइट करेगा .. :) – Onkelborg

+0

यह हो सकता है, लेकिन यह ovrewrite नहीं होना चाहिए, ब्राउज़र कार्यान्वयन पर निर्भर करता है। बस जावास्क्रिप्ट के माध्यम से हमेशा और केवल टेक्स्ट नोड के बजाय मूल्य-विशेषता के माध्यम से पहुंचने के लिए ध्यान रखें, और आपको किसी भी ब्राउज़र में समस्याएं नहीं मिलेंगी। –

1

Node.text() retrieves के प्रकार के साथ करने के लिए है ...

.Text() मेल खाने वाले सभी तत्वों की innerText (नहीं एचटीएमएल) हो जाता है और .val() से मूल्यों को पुन: प्राप्त इनपुट तत्व ...