PHP DOMnode对象包含textContent和nodeValue属性,它们似乎都是节点的innerHTML.
nodeValue:此节点的值,具体取决于其类型
textContent:此属性返回此节点及其后代的文本内容.
这两个属性有什么区别?什么时候使用一个而不是另一个?
Ja͢*_*͢ck 42
我终于想知道它的区别,所以我挖掘了源头并找到了答案; 在大多数情况下,没有明显的区别,但是你应该注意一些边缘情况.
二者->nodeValue
并->textContent
适用于以下类别(节点类型)相同:
以下类(节点类型)的->nodeValue
属性产量NULL
:
->textContent
以下类别不存在该属性:
DOMNameSpaceNode
(没有记录,但可以在//namespace:*
选择器中找到)->nodeValue
以下类别不存在该属性:
另见:dom_node_node_value_read()
和dom_node_text_content_read()
mik*_*ook 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);
Run Code Online (Sandbox Code Playgroud)
输出:
string(15) "old contenttest"
NULL
string(15) "old contenttest"
string(15) "old contenttest"
Run Code Online (Sandbox Code Playgroud)
因为: nodeValue - 此节点的值,具体取决于其类型
两者textContent
并nodeValue
返回未转义的文本;即<
成为<
。
textContent
将所有子级的所有内容串联在一起。这是一个重要的区别; 例如,在Chrome中,最大长度nodeValue
为65536个字符(不是字节);如果已经将节点的内容设置为比其更长的内容,则需要迭代子节点(如果要使用),nodeValue
而子节点textContent
将为您执行串联。
如所讨论的,还有一些不支持nodeValue
但支持的DOM类textContent
。
nodeValue
由于明显的原因而更快;但是,除非您确切知道节点结构的真正含义,否则不要使用它。
归档时间: |
|
查看次数: |
31029 次 |
最近记录: |