Javascript 设置HTMLCollection中项的属性

Javascript 设置HTMLCollection中项的属性,javascript,dom,htmlcollection,Javascript,Dom,Htmlcollection,跳到底部查看问题: 我正在经历一段与htmlCollections的地狱般的时光,这些htmlCollections是从 document.getElementById("Id") 及 现在,我一直认为byClassName和TagName是唯一返回HTML集合的,但是出于某种原因,这段代码在第二行记录了一个htmlCollection。不好 var findPos = function(el) { console.log(el) var curleft = curtop = 0;

跳到底部查看问题:

我正在经历一段与htmlCollections的地狱般的时光,这些htmlCollections是从

document.getElementById("Id")

现在,我一直认为byClassName和TagName是唯一返回HTML集合的,但是出于某种原因,这段代码在第二行记录了一个htmlCollection。不好

var findPos = function(el) {
  console.log(el)
  var curleft = curtop = 0;
  if (el.offsetParent) {
    do {
      curleft += el.offsetLeft;
      curtop += el.offsetTop;
    } while (el = el.offsetParent);
    el.setAttribute("data-off-top", curtop);
  };
}

var myElement = document.getElementById("myId");
findPos(myElement);
做完全相同的事情,我不知道为什么

之前,我有最后两行这样的代码,我得到的是一个HTMLCollection,它不是只读的

var affixElements = document.getElementsByClassName("affixMe");
for (var i = 0; i < affixElements.length; i++) {
  var thisOne = affixElements.item(i);
  findPos(thisOne);
};
var affixElements=document.getElementsByClassName(“affixMe”);
对于(变量i=0;i
我有两个问题:

1) 为什么getElementById会返回htmlCollection

我已经检查了文档,没有其他id为“myId”的文档


2) 如何在HTML集合的各个项目中设置属性,例如设置偏移函数的数据属性?

getElementById
不会返回
HTMLCollection
,您的观察结果一定是错误的。“如何在HTML集合的各个项目中设置属性”简单地使用括号符号或
.item()
访问元素,就像您已经在做的那样,并调用元素上的
setAttribute
var affixElements = document.getElementsByClassName("affixMe");
for (var i = 0; i < affixElements.length; i++) {
  var thisOne = affixElements.item(i);
  findPos(thisOne);
};