使用数组中的子节点初始化变量

Initializing a variable with childNodes out of an array

谁能帮忙解释以下 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 的想法?


这是对 x、i 和 j 的简单声明。然而得到 "TypeError: x is undefined"。

下面是函数供参考:

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

没有合理的情况 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;