getElementsByTagName(“td”)没有't返回选定行的所有td子级
getElementsByTagName("td") doesn't return all td children for a selected row
我创建了一个javascript函数,用于反转表的行和列。这是代码:
function rotate(){
var table = document.getElementById("table");
var newtable = document.createElement("table");
var tablebody = table.getElementsByTagName("tbody")[0];
var newtablebody = document.createElement("tbody");
newtable.appendChild(newtablebody);
var rows = tablebody.getElementsByTagName("tr");
var heads = tablebody.getElementsByTagName("th");
var i;
for(i = 0; i < rows.length; i++)
{
var cells = rows[i].getElementsByTagName("td");
var j;
for(j = 0; j < heads.length; j++)
{
if(newtablebody.getElementsByTagName("tr")[j] == undefined)
{
var newrow = document.createElement("tr");
newtablebody.appendChild(newrow);
}
if(cells[j] == undefined)
{
var newcell = document.createElement("td");
newtablebody.getElementsByTagName("tr")[j].appendChild(newcell);
}
else
{
var newcell = cells[j];
var nbspan = cells[j].getAttribute("colspan");
newcell.setAttribute("rowspan", nbspan);
newcell.setAttribute("colspan", 1);
newtablebody.getElementsByTagName("tr")[j].appendChild(newcell);
}
}
}
table.innerHTML = newtable.innerHTML;
};
问题是,当我试图获取当前行的所有标记名为"td"的子级时,我会得到很多未定义的单元格,而我可以从控制台日志中看到这些单元格存在并包含数据(我在日志中显示innerHTML)。
我真的很失落,所以任何帮助都将不胜感激。谢谢
当您将现有单元格附加到新表行时,您会隐式地将其从旧表行中删除;一个单元格一次只能位于DOM中的一个位置。getElementsByTagName()
返回的节点列表为live,这意味着从表行中删除该单元格也会立即将其从cells
数组中删除。这意味着位于cells[j]
的单元格突然消失,cells[j]
因此成为(旧)表行中的下一个单元格。然而,您的循环仍然以j
为增量,因此无论何时发生这种情况,都可以跳过一个单元格。
克服这个问题的一个简单方法是在开始循环之前将节点列表复制到数组中:
var cells = rows[i].getElementsByTagName("td");
cells = [].map.call(cells, Object);
现在你有了一个普通的数组,元素不会神奇地从中消失。
相关文章:
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 解析html td返回NaN
- 获取 innerText of td 返回错误对象 #
没有方法 'getElementsByTag - getElementsByTagName(“td”)没有't返回选定行的所有td子级
- td 元素上的 OnClick 函数返回第一列值和标头值
- 如果所有td.has_pais_dist都有文本,则返回“true”,否则返回“false”
- 从函数返回内容时,将新创建的TD元素上的.innerHTML设置为空白
- 如何使用angularjs从返回数据中删除表td