Kotchasan Framework Documentation

Kotchasan Framework Documentation

DOMNode

TH 05 Feb 2026 07:48

DOMNode

\Kotchasan\DOMNode แทน node ใน DOM structure

การสร้าง

DOMNode ถูกสร้างโดย DOMParser โดยปกติไม่ต้องสร้างเอง

use Kotchasan\DOMNode;

// สร้าง node ใหม่
$node = new DOMNode(
    'DIV',           // nodeName
    null,            // parentNode
    ['class' => 'container'],  // attributes
    null             // nodeValue (สำหรับ text node)
);

// Text node
$textNode = new DOMNode('', $parentNode, [], 'Hello World');

Constructor

$node = new DOMNode($nodeName, $parentNode, $attributes, $nodeValue = null);
Parameter Type Description
$nodeName string ชื่อ tag (เช่น DIV, P) ว่างสำหรับ text node
$parentNode DOMNode/null Parent node
$attributes array HTML attributes
$nodeValue string/null ค่าสำหรับ text node

Properties

nodeName

ชื่อของ tag (uppercase)

echo $node->nodeName;  // "DIV", "P", "SPAN"

// Text node จะมี nodeName เป็นค่าว่าง
if ($node->nodeName === '') {
    echo "This is a text node";
}

nodeValue

ค่าของ text node

// สำหรับ text node
echo $node->nodeValue;  // "Hello World"

// สำหรับ element node จะเป็น null

attributes

Array ของ HTML attributes (keys เป็น uppercase)

$node->attributes['CLASS'];  // "container"
$node->attributes['ID'];     // "main"
$node->attributes['HREF'];   // "https://..."

parentNode

Reference ไปยัง parent node

if ($node->parentNode !== null) {
    echo "Parent: " . $node->parentNode->nodeName;
}

childNodes

Array ของ child nodes

foreach ($node->childNodes as $child) {
    echo $child->nodeName . "\n";
}

previousSibling / nextSibling

Sibling nodes

// Previous sibling
if ($node->previousSibling) {
    echo "Previous: " . $node->previousSibling->nodeName;
}

// Next sibling
if ($node->nextSibling) {
    echo "Next: " . $node->nextSibling->nodeName;
}

Methods

hasChildNodes()

ตรวจสอบว่ามี child nodes หรือไม่

if ($node->hasChildNodes()) {
    echo "มี " . count($node->childNodes) . " children";
}

hasClass()

ตรวจสอบว่ามี CSS class หรือไม่

if ($node->hasClass('active')) {
    echo "Node มี class 'active'";
}

if ($node->hasClass('container')) {
    // ...
}

isInlineElement()

ตรวจสอบว่าเป็น inline element หรือไม่

if ($node->isInlineElement()) {
    echo "Inline element";
} else {
    echo "Block element";
}

Inline elements:
B, BIG, I, SMALL, TT, ABBR, ACRONYM, CITE, CODE, DFN, EM, STRONG, SAMP, TIME, VAR, A, BDO, BR, IMG, MAP, OBJECT, Q, SCRIPT, SPAN, SUB, BUTTON, INPUT, LABEL, SELECT, TEXTAREA

nodeText()

ดึง text content ของ node และ descendants ทั้งหมด

$html = '<div><p>Hello</p><p>World</p></div>';
$parser = new DOMParser($html);
$div = $parser->nodes()[0];

echo $div->nodeText();  // "HelloWorld"

unentities()

แปลง HTML entities เป็น characters

$text = $node->unentities('Hello&nbsp;World&amp;More');
// "Hello World&More"

Supported entities:

  • &nbsp;
  • &amp;&
  • &lt;<
  • &gt;>
  • &#39;'
  • &quot;"

ตัวอย่างการใช้งาน

Traverse DOM Tree

function traverse($node, $callback, $depth = 0) {
    $callback($node, $depth);

    foreach ($node->childNodes as $child) {
        traverse($child, $callback, $depth + 1);
    }
}

$parser = new DOMParser('<div><p>Hello</p></div>');
foreach ($parser->nodes() as $node) {
    traverse($node, function($n, $d) {
        $indent = str_repeat('  ', $d);
        echo $indent . ($n->nodeName ?: 'TEXT') . "\n";
    });
}

Find Elements by Class

function findByClass($node, $className, &$results = []) {
    if ($node->hasClass($className)) {
        $results[] = $node;
    }

    foreach ($node->childNodes as $child) {
        findByClass($child, $className, $results);
    }

    return $results;
}

$parser = new DOMParser('<div class="item">1</div><div class="item">2</div>');
$items = [];
foreach ($parser->nodes() as $node) {
    findByClass($node, 'item', $items);
}

echo count($items) . " items found";  // 2
function extractLinks($node, &$links = []) {
    if ($node->nodeName === 'A' && isset($node->attributes['HREF'])) {
        $links[] = $node->attributes['HREF'];
    }

    foreach ($node->childNodes as $child) {
        extractLinks($child, $links);
    }

    return $links;
}

$html = '<a href="/page1">Link 1</a><a href="/page2">Link 2</a>';
$parser = new DOMParser($html);

$links = [];
foreach ($parser->nodes() as $node) {
    extractLinks($node, $links);
}

print_r($links);
// ['/page1', '/page2']

คลาสที่เกี่ยวข้อง