2013-04-29 4 views
1

Вот исходный HTML:JavaScript-форма DOM-обход - где текст ярлыка?

<li class="box"> 
     <label for="text0">Career Objectives:</label> 
     <div> 
      <textarea id="text0" 
        name="text0" 
        cols="55" 
        rows="6"> 
      </textarea> 
     </div> 
    </li> 

Вот обходом код, который я пробовал:

console.log($("text0").parentNode.previousSibling.nodeName); 
console.log($("text0").parentNode.previousSibling.nodeType); 
console.log($("text0").parentNode.previousSibling.nodeValue); 
console.log($("text0").parentNode.previousSibling.innerText); 
console.log($("text0").parentNode.previousSibling.innerHTML); 
console.log($("text0").parentNode.previousSibling.value); 

Здесь выход:

#text  projectJS.js:84 
3   projectJS.js:85 

      projectJS.js:86 <--- 2 lines of blank output 
undefined projectJS.js:87 
undefined projectJS.js:88 
undefined projectJS.js:89 

Как я понимаю DOM:

  • ParentNode является ДИВ
  • PreviousSibling это метка
  • NodeType текстов

Что я упускаю, пожалуйста? Где фактический текст?

EDIT это не JQuery:

var $ = function(id) { return document.getElementById(id); } 

ответ

2

PreviousSibling это метка

Нет, как тип узла и имя уже указывают, предыдущий родственный является следующий узел между label и div, содержащий все пробельные символы (разрывы строк после </label> и несколько пробелов до <div>).
Это также является причиной для .innerHTML, .innerText и .value вывода undefined, текстовые узлы не имеют таких свойств.

$("text0").parentNode.previousSibling.previousSibling будет ярлыком.

Для этикетки, то nodeName будет label (таким же, как tagName) и nodeType будет 1, узел элемента.

Где находится текст?

Текст метки - это первый дочерний узел (текстовый узел) элемента label. Вы можете получить с:

$("text0").parentNode.previousSibling.previousSibling.childNodes[0].nodeValue 

или

$("text0").parentNode.previousSibling.previousSibling.innerHTML 

В зависимости от библиотеки у вас есть в вашем распоряжении, выбирая или перемещения к элементу метки может быть упрощена.

+0

Как может '$ (" text0 ")' соответствовать чему-нибудь? Он попытается правильно подобрать тег? – Bart

+0

Когда '' 'вызывает' document.getElementById' с переданным аргументом. Это не jQuery. –

+1

IE может не включать пробельный узел в DOM, и в этом случае 'previousSibling' действительно будет ярлыком. Предложите использовать что-то наподобие 'parentNode.parentNode.getElementsByTagName ('label') [0]', чтобы справиться с несогласованностью - или, как упомянуто, библиотеками, которые скрывают эту боль. – bobince

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