gpt4 book ai didi

Javascript getElementsByTagName 破坏了 firefox?

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:41 25 4
gpt4 key购买 nike

我今天在 Firefox 中遇到了 Javascript 最奇怪的问题。

我正在尝试操作一些表格行,但是 .getElementsByTagName("tr");正在拉回垃圾。

dynamicTable.tableBody = dynamicTable.getElementsByTagName("tbody")[0];
var tableRows = dynamicTable.tableBody.getElementsByTagName("TR");
var actualTableRows = new Array();
for(var i in tableRows) {
var row = tableRows[i];
alert(row.tagName);
if(row.tagName == "TR"){
actualTableRows.push(row);
}
}
dynamicTable.bodyRows = actualTableRows;

当然,令人费解的部分是我修复错误的临时 hack。由于某种原因.getElementsByTagName("tr")也在撤回一些功能。

顺便说一句,上面的警报是这样的“TR TR TR TR undefined undefined undefined”。

我想要的代码是这样的

dynamicTable.bodyRows = dynamicTable.tableBody.getElementsByTagName("tr");

然后 bodyrows不只包含 <tr>元素,它里面有前面提到的垃圾。

有什么想法吗?

编辑:如果我只使用第二个代码块,我会在一个有 21 个表行(tr 元素)的表上得到一个 24 个元素长的列表。第一个代码块只是解决问题的 hack。

如果我将警报更改为 alert(row)我得到:

[object HTMLTableRowElement]
...

function item() {
[native code]
}

21

function namedItem() {
[native code]
}

最佳答案

for-in 语句还枚举了 HTMLCollection 上的 itemnamedItem 方法。 getElementsByTagName 返回。

迭代像 DOM 集合这样的类数组元素,总是推荐一个简单的顺序循环,for...in 语句旨在用于 < strong>枚举对象属性。

dynamicTable.tableBody = dynamicTable.getElementsByTagName("tbody")[0];
var tableRows = dynamicTable.tableBody.getElementsByTagName("TR");
var actualTableRows = new Array();
for(var i = 0, n = tableRows.length; i < n; i++) { // <---- simple for loop
var row = tableRows[i];
alert(row.tagName);
if(row.tagName == "TR"){
actualTableRows.push(row);
}
}
dynamicTable.bodyRows = actualTableRows;

你不应该将 for..in 与类似数组的对象一起使用,因为:

  • 无法保证迭代的顺序,数组索引可能不会按数字顺序访问。
  • 还枚举了继承的属性(这可能是问题的另一个来源)。

推荐文章:

关于Javascript getElementsByTagName 破坏了 firefox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com