Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion src/Rct567/DomQuery/DomQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,23 @@ public function text($val=null)
{
if ($val !== null) { // set node value for all nodes
foreach ($this->nodes as $node) {
$node->nodeValue = $val;
// Handle text nodes.
if ($node->nodeType === XML_TEXT_NODE) {
$node->textContent = $val;
}
else {
$node->nodeValue = $val;
}

}

return $this;
}
// Return text for text nodes only.
if (($node = $this->getFirstElmNodeAny()) && ($node->nodeType === XML_TEXT_NODE)) {
return $node->textContent;
}

if ($node = $this->getFirstElmNode()) { // get value for first node
return $node->nodeValue;
}
Expand Down
21 changes: 21 additions & 0 deletions src/Rct567/DomQuery/DomQueryNodes.php
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,20 @@ protected function getFirstElmNode()
}
}

/**
* Return first DOMNode, dom nodes are any node, not just <elem> nodes.
*
* @return \DOMElement|null
*/
protected function getFirstElmNodeAny()
{
foreach ($this->nodes as $node) {
if ($node instanceof \DOMNode) {
return $node;
}
}
}

/**
* Access xpath or ... DOMNode properties (nodeName, parentNode etc) or get attribute value of first node
*
Expand All @@ -618,6 +632,13 @@ public function __get($name)
}
}

// Fallback for any dom nodes.
if ($node = $this->getFirstElmNodeAny()) {
if (isset($node->$name)) {
return $node->{$name};
}
}

return null;
}

Expand Down