2015-03-24 9 views
0

Я немного смущен о свойствах текстовых узлов в JavaScript. Пусть говорят, что у меня есть этот кусок HTML:Свойства текстовых узлов JavaScript

<html lang="en-US"> 
<head> 
    <title>JavaScript test</title> 
    <script type="text/javascript" src="test.js"></script> 
</head> 
<body onload="load()"> 
    <div> 
     <p>Paragraph 1</p> 
     <p>Paragraph 2</p> 
    </div> 
    <ul> 
     <li>1.</li> 
     <li>2.</li> 
    </ul> 
</body> 

И onload() функции:

function load() 
{ 
    var bodyChildren = document.childNodes[0].childNodes; 
    for(var i = 0; i < bodyChildren.length; i++) 
    { 
     alert(bodyChildren[i].nodeType 
      + ": " + bodyChildren[i].nodeName 
      + ": " + bodyChildren[i].nodeValue); 
    } 
} 

Это http://www.w3schools.com/js/js_htmldom_navigation.asp говорит: "nodeValue для текстовых узлов является сам текст" , но я получаю этот выход:

3: #text: 
1: DIV: null 
3: #text: 
1: UL: null 
3: #text: 

Не могли бы вы объяснить мне почему nodeValuenull для element node и "ничего не дано" для text node?

Edit: Материал о белых пространств хорошо описана здесь: https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Whitespace_in_the_DOM

+1

Интересно, как 'document.childNodes [0]' получает элемент body? – Bergi

+0

Это «узел HTML», а дети - «голова» и «тело». – Majak

+0

Действительно, мне пришлось изменить его на 'document.body.childNodes', чтобы заставить его работать, но если он работает для вас, это, наверное, хорошо? – adeneo

ответ

2

почему nodeValue возвращает null для узла элемента

Потому что element nodes не имеет значений. У них в основном есть только имя, атрибуты и дети.

... и «ничего» для текстового узла?

Он возвращает вам что-то: пробел между этими узлами элементов.

+0

О, я получил его сейчас, мне нужно получить «nodeValue» дочернего элемента элемента, а не самого элемента элемента, который возвращает часть текста перед скобками '<..>' элементов. В этом случае фрагмент текста является пробелом. Спасибо за лучшее понимание DOM! – Majak

2

Вот что nodeValue делает согласно specification, он возвращает этот

Comment    - content of the comment 
Document    - null 
DocumentFragment  - null 
DocumentType   - null 
Element    - null 
NamedNodeMap   - null 
EntityReference  - null 
Notation    - null 
ProcessingInstruction - entire content excluding the target 
Text     - content of the text node 

Обратите внимание, что она возвращает null для ничего , но комментарии, textNodes и инструкция обработки для всех других типов узлов null явно возвращается.

Чтобы получить текстовое содержимое узла элемента, используйте textContent (innerText для более старых IE), чтобы получить HTML узла элемента, используйте innerHTML

+0

Также спасибо за этот точный ответ. Принятый ответ положил меня на понимание элемента с текстовым узлом. – Majak

 Смежные вопросы

  • Нет связанных вопросов^_^