PHP DOMnode对象包含textContent和nodeValue属性,这两个属性似乎都是节点的innerHTML。
nodeValue:此节点的值,具体取决于其类型
textContent:此属性返回此节点及其后代的文本内容。
这两个属性有什么区别?什么时候使用一个而不是另一个?
答案 0 :(得分:41)
我终于想知道其中的差异,所以我挖了source并找到答案;在大多数情况下,没有明显的区别,但是你应该注意一些边缘情况。
->nodeValue
和->textContent
对于以下类(节点类型)都是相同的:
->nodeValue
属性为以下类(节点类型)生成NULL
:
以下类不存在->textContent
属性:
DOMNameSpaceNode
(未记录,但可以在//namespace:*
选择器中找到)以下类不存在->nodeValue
属性:
另请参阅:dom_node_node_value_read()
和dom_node_text_content_read()
答案 1 :(得分:16)
希望这有意义:
$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
答案 2 :(得分:4)
textContent
和nodeValue
都返回未转义的文字;即<
变为<
。
textContent
将所有孩子的所有内容联系在一起。这是一个重要的区别;例如,在Chrome中,nodeValue
的最大长度为65536个字符(不是字节);如果您已经将节点的内容设置为长于某个节点的内容,则需要使用nodeValue
来迭代子节点,而textContent
将为您执行连接。
如上所述,还有一些DOM类不支持nodeValue
但支持textContent
。
nodeValue
速度更快;但除非你确切知道节点结构究竟是什么,否则不要使用它。
答案 3 :(得分:0)
如果您想为textContent
属性注释分配一个值,它不适用于PHP < 5.6.1。为了向后兼容,请考虑使用nodeValue
。
答案 4 :(得分:-3)
他们是一回事。 (mikespook的NULL来自非DOMNode)