PHP DOMnode对象包含一个textContent和nodeValue属性,这两个属性似乎都是节点的innerHTML。
nodeValue:此节点的值,取决于其类型 textContent:此属性返回此节点及其后代的文本内容。
这两种属性有什么区别?什么时候使用一种而不是另一种合适?
发布于 2014-07-14 05:52:20
最后,我也想知道其中的区别,所以我深入研究了来源并找到了答案;在大多数情况下,不会有明显的差别,但是有很多边缘情况您应该知道。
对于以下类(节点类型),->nodeValue和->textContent都是相同的:
DOMAttrDOMTextDOMElementDOMCommentDOMCharacterDataDOMProcessingInstruction->nodeValue属性为以下类(节点类型)生成NULL:
DOMDocumentFragmentDOMDocumentDOMNotationDOMEntityDOMEntityReference以下类不存在->textContent属性:
DOMNameSpaceNode (没有文档,但可以在//namespace:*选择器中找到)以下类不存在->nodeValue属性:
DOMDocumentType另见:dom_node_node_value_read()和dom_node_text_content_read()
发布于 2012-09-12 05:04:31
希望这是有意义的:
$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 -此节点的值,取决于其类型
发布于 2016-12-06 17:03:57
textContent和nodeValue都返回未转义的文本;即<变为<。
textContent将所有子级的所有内容连接在一起。这是一个重要的区别;例如,在Chrome中,nodeValue的最大长度是65536个字符(而不是字节);如果您已经将节点的内容设置为更长的内容,那么如果您想要使用nodeValue,则需要迭代子节点,而textContent将为您执行连接。
如前所述,还有几个DOM类不支持nodeValue,但支持textContent。
由于明显的原因,nodeValue速度更快;但是,除非您确切知道节点结构是什么,否则不要使用它。
https://stackoverflow.com/questions/12380919
复制相似问题