2

一番下にスキップして質問を表示:

から投げ返されている htmlCollections でめちゃくちゃ時間を過ごしています

document.getElementById("Id")

document.getElementsByClassName("ClassName")

さて、HTML コレクションを返すのは byClassName と TagName だけだといつも思っていましたが、何らかの理由で、このコードは 2 行目に 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);

まったく同じことをしますが、その理由はわかりません。

以前は、最後の 2 行がこれで、読み取り専用として役に立たない HTMLCollection を取得していました。

var affixElements = document.getElementsByClassName("affixMe");
for (var i = 0; i < affixElements.length; i++) {
  var thisOne = affixElements.item(i);
  findPos(thisOne);
};

2 つの質問があります。

1) getElementById が htmlCollection を返すのはなぜですか?

私はすでにドキュメントをチェックしましたが、id="myId" を持つものは他にありません

2) オフセット関数のデータ属性を設定するために、HTML コレクションの個々の項目に属性を設定するにはどうすればよいですか?

4

0 に答える 0