[英]Javascript return an empty array but with two elements in it
您正在進行的幾件事解釋了這種現象:
您正在執行console.log
時,文檔中尚無此類元素。 JavaScript可能會在文檔准備好之前執行。 這解釋了為什么temp[0]
未定義。
getElementsByClassName
返回的HTMLCollection
不是數組,並且具有一些神奇的行為:它是一個實時集合。 因此,如果文檔獲得該類的其他元素,它將神奇地出現在該temp
集合中,而無需您觸摸它!
當您將對象登錄到控制台時,Chrome開發者工具此時將不會異步收集所有對象屬性。 這意味着盡管在記錄集合時該集合為空,但單擊開發工具以查看集合中的內容時不再是。
請參閱此腳本中說明的前兩點:
var temp = document.getElementsByClassName('html5gallery-tn-image-0'); console.log(temp.length); // 0 // add the class to the element mydiv.className = "html5gallery-tn-image-0"; console.log(temp.length); // 1
<div id="mydiv"></div>
移動您的JavaScript代碼,使其僅在文檔完全加載后才執行。 要么:
body
標簽的末尾,或者 document.addEventListener('DOMContentLoaded', function () { ... });
打回來。 在console.log中,它返回了兩個圖像元素,因此它不是空的。
getElementsByClassName
返回一個HTMLCollection,它具有一些特殊屬性。 其中之一是,一旦DOM更新,類似數組的東西的內容就會更新。 另外,在Chrome中,顯示“ []”的部分會在您按Enter鍵后立即進行計算,但是內容(這兩個元素)只有在擴展輸出時才會得到評估。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.