Показать сообщение отдельно
  #1 (permalink)  
Старый 16.10.2012, 23:00
Интересующийся
Отправить личное сообщение для LeD4eG Посмотреть профиль Найти все сообщения от LeD4eG
 
Регистрация: 16.04.2012
Сообщений: 14

Работа с nodeType
Добрый вечер!
Подставил перед собой следующую банальную на первый взгляд задачу: подсчитать количество дочерних элементов, без знаков возврата каретки (их необходимо удалить). Как известно перевод каретки - это текстовый узел, то есть для следующей разметки:
<div id="block">
   <span>bla</span>
   <span>bla</span>
   <span>bla</span>
</div>

(здесь мы имеем 7 дочерних элементов - 3 элемента span и 4 символа перевода каретки), имеем следующий код:
var childs = document.getElementById('block').childNodes,
       counter = 0; //количество не текстовых узлов
  for(var i = 0; i<childs.length; i++){
    var mythis = childs[i];
    (mythis.nodeType==3)? mythis.parentNode.removeChild(mythis) : ++counter;
  }


Я получаю counter равным 0. если немного модифицировать приведенный выше код:
var childs = document.getElementById('block').childNodes,
       counter = 0; //количество не текстовых узлов
  for(var i = 0; i<childs.length; i++){
    var mythis = childs[i];
    if(mythis.nodeType==3) mythis.parentNode.removeChild(mythis);  
    ++counter;
  }
, получаю counter равным 4 (то есть количество итераций), однако данный код:
var childs = document.getElementById('block').childNodes,
       counter = 0; //количество не текстовых узлов
  for(var i = 0; i<childs.length; i++){
    var mythis = childs[i];
    if(mythis.nodeType==1) ++counter;
  }
, работает верно и выдает counter равным 3.

Объясните, пожалуйста, что я делаю не так?

А также ещё вопрос: почему из цикла я не могу использовать указатель this? (приходится использовать переменную mythis)

Спасибо большое за помощь!
Ответить с цитированием