2012-10-16 11 views
16

tôi có mã html này:Cách lấy mã html của nút DOMElement?

<html> 
    <head> 
    ... 
    </head> 
<body> 
    <div> 
    <div class="foo" data-type="bar"> 
     SOMECONTENTWITHMORETAGS 
    </div> 
    </div> 
</body> 

tôi đã có thể nhận được "foo" yếu tố (nhưng chỉ nội dung của nó) với chức năng này:

private function get_html_from_node($node){ 
    $html = ''; 
    $children = $node->childNodes; 

    foreach ($children as $child) { 
    $tmp_doc = new DOMDocument(); 
    $tmp_doc->appendChild($tmp_doc->importNode($child,true)); 
    $html .= $tmp_doc->saveHTML(); 
    } 
    return $html; 
} 

Nhưng tôi muốn trả lại tất cả html thẻ (bao gồm các thuộc tính của nó) của DOMElement. Làm thế nào tôi có thể làm điều đó?

+0

Nếu bạn đang cố gắng để có được 'html_from_node'' class = "foo" 'bạn đang làm nó không chính xác. Có rất nhiều cách dễ dàng và ngắn gọn để làm điều này. –

+0

Điều này có hữu ích không? http://stackoverflow.com/questions/6366351/getting-dom-elements-by-class-name – EricG

+0

@webbandit Tôi biết có một cách tốt hơn. Xin cho tôi xem! – Xaver

Trả lời

37

Sử dụng đối số tùy chọn cho DOMDocument::saveHTML: điều này cho biết "chỉ xuất phần tử này".

return $node->ownerDocument->saveHTML($node); 

Lưu ý rằng đối số chỉ có sẵn từ PHP 5.3.6. Trước đó, bạn cần sử dụng DOMDocument::saveXML để thay thế. Kết quả có thể hơi khác. Ngoài ra, nếu bạn đã có tham chiếu đến tài liệu, bạn chỉ có thể thực hiện việc này:

$doc->saveHTML($node); 
+0

Điều này thực sự là những gì tôi cần nhưng đó là cho một plugin WordPress mà nên làm việc với phiên bản 3.4 và phiên bản này đòi hỏi php 5.2.4. – Xaver

+0

@revaxarts Sau đó sử dụng 'saveXML'. Đầu ra sẽ hơi khác ... – lonesomeday

+0

u chỉ cho tôi một ví dụ đầy đủ? Tôi không có tham chiếu đến tài liệu trong hàm chỉ có nút và 'DOMDocument :: saveXML ($ node)' không hoạt động giống như '$ node-> saveXML ($ node)' – Xaver