Инициализация переменной с дочерними узлами вне массива
Может кто-нибудь помочь объяснить, для чего предназначен следующий синтаксис JavaScript:
var tagLink_ar = document.getElementsByTagName('td');
**var x = tagLink_ar.childNodes, i=0, j;** // Not sure ???
Это из более старой функции javascript, которая больше не работает в IE>9 или FF.
tagLink_ar, конечно, является массивом тегов TD, но я ранее не видел переменную с индексными элементами i и j, и не могу найти подобный дескриптор в своем онлайн-исследовании. Я просто ссылаюсь на начальный элемент и J длину?
Мысли о том, как загрузить х аналогичным образом?
Имеет смысл, что это простая декларация для x, i и j. Тем не менее, получение "TypeError: x не определено".
Ниже приведена функция в качестве ссылки:
var tagLink_ar = document.getElementsByTagName('td');
**var x = tagLink_ar.childNodes, i=0, j;** // Not sure ???
while(j == x[i++]){
if(j.nodeType == 1 && nodeName == 'div'){
var viewDiv = getStyle(divElement, 'display');
if (viewDiv == 'block'){
x[j].style.borderBottom = "1px solid #000000";
}
}
}
Отметил синтаксическую ошибку на то время, должно было быть j=x[i++] и j.nodeName
2 ответа
Нет разумных обстоятельств, когда x
может иметь childNodes
имущество. tagLink_ar
это NodeList
и каждый из элементов в этом списке имеет childNodes
имущество.
Есть несколько других причин, почему этот код никогда не будет работать. Вы правильно скопировали?
Чтобы получить результат, который был разработан для кода, вы можете сделать это (я включаю некоторый пример HTML, чтобы вы могли запустить его как фрагмент):
var tagLink_ar = document.getElementsByTagName('td'),
children, i, j, node, viewDiv;
for (i = 0; i < tagLink_ar.length; i += 1) {
children = tagLink_ar[i].childNodes;
for (j = 0; j < children.length; j += 1) {
node = children[j];
if (node.nodeType === 1 &&
node.nodeName.toLowerCase() === 'div' &&
node.style.display === 'block') {
node.style.borderBottom = "1px solid #000000";
}
}
}
<table>
<tr>
<td>
<div>a</div>
</td>
<td>
<div style="display: block;">b</div>
</td>
</tr>
<tr>
<td>
<div style="display: block;">c</div>
</td>
<td>
<div style="display: block;">b</div>
</td>
</tr>
<tr>
<td>
<div>e</div>
</td>
<td>
<div>f</div>
</td>
</tr>
</table>
Рассматриваемый синтаксис просто инициализирует переменные, хотя и очень запутанно.
var x = tagLink_ar.childNodes, i=0, j;
Эквивалентно
var x = tagLink_ar.childNodes;
var i = 0;
var j = undefined;