首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript getElementById vs getElementsByClassName:返回類型差異導致 setAttribute 失效

     編輯:程式設計綜合問答

現象對比

// 失效
document.getElementsByClassName("class").setAttribute("src", "path");

// 生效
document.getElementById("id").setAttribute("src", "path");

核心區別

特性getElementByIdgetElementsByClassName
返回值單個 Element 對象 或 nullHTMLCollection (類數組,即時更新)
數量唯一 (ID 應唯一)0~N 個
調用 setAttribute直接調用需遍歷集合逐個調用
瀏覽器兼容IE5.5+IE9+

正確用法

單個元素 (ID)

var img = document.getElementById("myImg");
if (img) img.setAttribute("src", "new.jpg");

多個元素 (Class)

// 現代寫法 (推薦)
var imgs = document.getElementsByClassName("myImgClass");
Array.from(imgs).forEach(function(img) {
    img.setAttribute("src", "new.jpg");
});

// 或 querySelectorAll (靜態 NodeList)
document.querySelectorAll(".myImgClass").forEach(function(img) {
    img.src = "new.jpg"; // 直接屬性賦值更簡潔
});

// 兼容 IE8 寫法
var imgs = document.getElementsByClassName("myImgClass");
for (var i = 0; i < imgs.length; i++) {
    imgs[i].setAttribute("src", "new.jpg");
}

進階補充

  • HTMLCollection vs NodeList:前者即時反映 DOM 變化,後者靜態快照。動態增刪 class 節點時需注意。
  • 性能:`getElementById` 最快 (哈希表查找);`getElementsByClassName` 次之;`querySelectorAll` 最慢 (CSS 選擇器解析)。
  • 最佳實踐:優先使用 `id` 定位唯一元素;批量操作用 `querySelectorAll` + `forEach`,代碼可讀性最強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved