2012-09-12 17 views
34

PHP डोमोनोड ऑब्जेक्ट्स में textContent और nodeValue विशेषताएँ हैं जो दोनों नोड के आंतरिक HTML प्रतीत होते हैं।PHP डोम टेक्स्ट सामग्री बनाम नोड वैल्यू?

nodeValue: इस नोड के मूल्य अपने प्रकार

textContent पर निर्भर करता है: यह विशेषता रिटर्न इस नोड और उसके वंश का पाठ सामग्री।

इन दो गुणों के बीच क्या अंतर है? दूसरे के बजाय एक का उपयोग करना उचित कब है?

उत्तर

36

मैं अंत में अंतर भी जानना चाहता था, इसलिए मैंने source में खोला और जवाब मिला; ज्यादातर मामलों में कोई स्पष्ट अंतर नहीं होगा, लेकिन किनारे के मामलों का एक समूह है जिसके बारे में आपको अवगत होना चाहिए।

दोनों ->nodeValue और ->textContent निम्नलिखित वर्गों (नोड प्रकार) के लिए समान हैं:

->nodeValue संपत्ति पैदावार निम्नलिखित वर्गों के लिए NULL (नोड प्रकार):

->textContent संपत्ति निम्नलिखित वर्गों के लिए न के बराबर है:

  • DOMNameSpaceNode (दर्ज नहीं है, लेकिन //namespace:* चयनकर्ता के साथ पाया जा सकता है)

->nodeValue संपत्ति न के बराबर है निम्नलिखित कक्षाओं के लिए:

यह भी देखें: dom_node_node_value_read() और dom_node_text_content_read()

+1

यह एक अच्छा जवाब है, लेकिन यह गलत सवाल है। – pguardiario

+1

@ पगार्डियारियो पहले 11 वर्ग डोमोडेड के सभी वंशज हैं और सवाल डोमनोड के बारे में है, यह सुनिश्चित नहीं है कि यह प्रश्न के गलत जवाब कैसे है। –

13

आशा इस अर्थ कर देगा:

$doc = DOMDocument::loadXML('<body><!-- test --><node attr="test1">old content<h1>test</h1></node></body>'); 
var_dump($doc->textContent); 
var_dump($doc->nodeValue); 
var_dump($doc->firstChild->textContent); 
var_dump($doc->firstChild->nodeValue); 

आउटपुट:

string(15) "old contenttest" 
NULL 
string(15) "old contenttest" 
string(15) "old contenttest" 

क्योंकि: nodeValue - The value of this node, depending on its type

+0

एक DOMDocument के लिए नोडवेल्यू तब पूर्ण है? – danidacar

-3

वे एक ही बात कर रहे हैं। (mikespook का NULL गैर-डोमोडोड से है)

+0

नहीं, डोमडॉक्यूमेंट डोमोडेड का वंशज है; संपत्ति गेटटर के कार्यान्वयन सिर्फ मूल्य को शून्य के रूप में परिभाषित करता है। –

+0

हू? सवाल डोमोडोड के बारे में है, न कि DOMDocument। – pguardiario

+2

हां, ठीक है, DOMDocument भी एक डोमोडोड है ना? मैं विशेष रूप से माइक के जवाब के बारे में टिप्पणी के लिए जिक्र कर रहा था। –

0

आप textContent संपत्ति ध्यान दें कि यह PHP < 5.6.1 के लिए काम नहीं करता है के लिए एक मूल्य बताए चाहते हैं। बजाय nodeValue का उपयोग कर, पिछली संगतता के लिए विचार करें।

2

दोनों textContent और nodeValue वापसी नहीं छोड़ा जाएगा पाठ; अर्थात &lt;< हो जाता है।

textContent संयोजित एक साथ सभी बच्चों के सामग्री के सभी। यह एक महत्वपूर्ण अंतर है; उदाहरण के लिए, क्रोम में nodeValue की अधिकतम लंबाई 65536 (नहीं बाइट्स) वर्ण है; आप पहले से ही कुछ करने के लिए एक नोड के सामग्री की तुलना में है कि आप बच्चे नोड्स पुनरावृत्ति करने के लिए आप nodeValuetextContent जबकि उपयोग करने के लिए आप के लिए संयोजन प्रदर्शन करेंगे चाहते हैं की आवश्यकता होगी अब सेट किया है।

जैसा कि चर्चा की गई है, वहां कई डीओएम कक्षाएं भी हैं जो nodeValue का समर्थन नहीं करती हैं लेकिन textContent का समर्थन करती हैं।

nodeValue स्पष्ट कारणों से तेज़ है; हालांकि इसका उपयोग तब तक न करें जब तक आपको पता न हो कि नोड संरचना वास्तव में क्या है।

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