Объекты PHP DOMnode содержат атрибуты textContent и nodeValue, которые кажутся внутреннимHTML узла.
nodeValue: значение этого узла, в зависимости от его типа
- Вызов неопределенной функции pcntl_fork () ubuntu server apache
- Почему json_encode добавляет обратную косую черту?
- Невозможно переопределить заголовок содержимого в s3
- Получайте изображения с сервера PHP-MySql на Android с помощью json
- Установите тайм-аут для конкретной функции / блока кода (не весь скрипт)?
textContent: этот атрибут возвращает текстовое содержимое этого узла и его потомков.
В чем разница между этими двумя свойствами? Когда правильно использовать один вместо другого?
Я, наконец, тоже хотел узнать эту разницу, поэтому я ворвался в источник и нашел ответ; в большинстве случаев не будет заметной разницы, но есть куча крайних случаев, о которых вы должны знать.
Оба ->nodeValue
и ->textContent
идентичны для следующих классов (типы узлов):
DOMAttr
DOMText
DOMElement
DOMComment
DOMCharacterData
DOMProcessingInstruction
Свойство ->nodeValue
дает NULL
для следующих классов (типы узлов):
DOMDocumentFragment
DOMDocument
DOMNotation
DOMEntity
DOMEntityReference
Свойство ->textContent
не существует для следующих классов:
DOMNameSpaceNode
(не документирован, но может быть найден с //namespace:*
селектор) Свойство ->nodeValue
не существует для следующих классов:
DOMDocumentType
См. Также: dom_node_node_value_read()
и dom_node_text_content_read()
Надеюсь, это будет иметь смысл:
$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 – значение этого узла, в зависимости от его типа
И textContent
и nodeValue
возвращают nodeValue
текст; т.е. <
становится <
.
textContent
объединяет все содержимое всех детей. Это важное различие; например, в Chrome максимальная длина nodeValue
составляет 65536 символов (а не байтов); если вы уже установили содержимое узла чем-то дольше, чем вам нужно будет перебирать дочерние узлы, если вы хотите использовать nodeValue
тогда как textContent
будет выполнять конкатенацию для вас.
Как обсуждалось, есть также несколько классов DOM, которые не поддерживают nodeValue
но поддерживают textContent
.
nodeValue
быстрее по понятным причинам; однако не используйте его, если вы точно не знаете, что такое структура узла.
Если вы хотите присвоить значение textContent
обратите внимание, что он не работает для PHP <5.6.1 . nodeValue
этого рассмотрите возможность использования nodeValue
для обратной совместимости.
Это одно и то же. (NULL от mikespook от не-DOMNode)