2012-09-12 25 views
34

Đối tượng DOMnode PHP chứa các thuộc tính textContentnodeValue mà cả hai dường như là innerHTML của nút.PHP DOM textContent vs nodeValue?

nodeValue: Giá trị của nút này, tùy thuộc vào loại của nó

textContent: Thuộc tính này trả về nội dung văn bản của nút này và con cháu của mình.

Sự khác nhau giữa hai thuộc tính này là gì? Khi nào nó thích hợp để sử dụng cái thay vì cái kia?

Trả lời

36

Cuối cùng tôi cũng muốn biết sự khác biệt, vì vậy tôi đào vào source và tìm thấy câu trả lời; trong hầu hết các trường hợp, sẽ không có sự khác biệt rõ rệt, nhưng có một loạt các trường hợp cạnh mà bạn cần biết.

Cả ->nodeValue->textContent là giống hệt nhau cho các lớp sau (loại nút):

Các ->nodeValue sản lượng tài sản NULL cho các lớp sau (loại nút):

Thuộc tính ->textContent là không tồn tại cho các lớp sau:

  • DOMNameSpaceNode (không ghi nhận, nhưng có thể được tìm thấy với //namespace:* selector)

Thuộc tính ->nodeValue là không tồn tại cho các lớp sau:

Xem thêm: dom_node_node_value_read()dom_node_text_content_read()

+1

Đây là một câu trả lời hay, nhưng đó là câu hỏi sai. – pguardiario

+1

@pguardiario 11 lớp đầu tiên là tất cả con cháu của DOMNode và câu hỏi là về DOMNode, không chắc đó là câu trả lời sai cho câu hỏi. –

13

Hy vọng điều này sẽ có ý nghĩa:

$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); 

Output:

string(15) "old contenttest" 
NULL 
string(15) "old contenttest" 
string(15) "old contenttest" 

Bởi vì: nodeValue - The value of this node, depending on its type

+0

NútValue cho DOMDocument là NULL sau đó? – danidacar

-3

Họ là những điều tương tự. (NULL của mikespook là từ một mã không phải là DOMNode)

+0

Không, DOMDocument là một hậu duệ của DOMNode; việc thực hiện getter thuộc tính chỉ định nghĩa giá trị là NULL. –

+0

Huh? Câu hỏi là về DOMNode, không phải DOMDocument. – pguardiario

+2

Có, tốt, DOMDocument cũng là một DOMNode phải không? Tôi đã đề cập cụ thể đến nhận xét về câu trả lời của mike. –

0

Nếu bạn muốn gán một giá trị cho các nốt textContent tài sản mà nó không làm việc cho PHP < 5.6.1. Thay vào đó, hãy cân nhắc sử dụng nodeValue để tương thích ngược.

2

Cả hai textContentnodeValue trả về văn bản không thoát; tức là &lt; trở thành <.

textContent kết hợp tất cả nội dung của tất cả trẻ em. Đây là một dấu hiệu đặc biệt quan trọng; ví dụ: trong Chrome độ dài tối đa là nodeValue là 65536 ký tự (không phải byte); nếu bạn đã đặt nội dung của một nút thành một cái gì đó dài hơn bạn sẽ cần phải lặp lại các nút con nếu bạn muốn sử dụng nodeValue trong khi textContent sẽ thực hiện nối cho bạn.

Như đã thảo luận, cũng có một số lớp DOM không hỗ trợ nodeValue nhưng hỗ trợ textContent.

nodeValue nhanh hơn vì những lý do hiển nhiên; tuy nhiên không sử dụng nó trừ khi bạn biết chính xác cấu trúc nút thực sự là gì.

Các vấn đề liên quan