Добрый вечер!
Подставил перед собой следующую банальную на первый взгляд задачу: подсчитать количество дочерних элементов, без знаков возврата каретки (их необходимо удалить). Как известно перевод каретки - это текстовый узел, то есть для следующей разметки:
<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)
Спасибо большое за помощь!