我有一个应该相当简单的功能,并且应该在加载后完成,以减少初始加载时间。
基本上我使用这段代码来获取类“prefImg”的所有元素并用它们做一些事情。但是当在firebug中调试时,它表示var divsList是未定义的。
function populatePrefsList()
{
var divsList = new Array();
divsList = document.getElementsByClassName("prefImg");
var x = divsList.length;
var i = 0;
for(i=0; i<divsList.length; i++) {
var imgs = divsList[i].getElementsByTagName("img");
var imgSRC = imgs[0].src;
var alt = imgs[0].alt;
var descs = divsList[i].getElementsByTagName("h4");
var desc = descs[0].innerHTML;
//var thisPref = new preference(imgSRC, alt, desc);
//prefsList[i] = thisPref;
}
}
显然我在var x = divsList.length
...
我无法理解这一点,我最初在页面的头部有脚本,但是搞定它可能还没有加载div,已将它移动到Body的底部。这并没有解决它。
我有var divsList = document.getElementsByClassName("prefImg");
如果有人能告诉我哪里出错了,那么我将不胜感激。大约有50个带有className prefImg
的div。
干杯
答案 0 :(得分:5)
您可以使用querySelectorAll而不是getElementsByClassName:
更改divsList = document.getElementsByClassName("prefImg");
到此divsList = document.querySelectorAll(".prefImg");
DEMO - http://jsfiddle.net/ya3gU/
顺便说一下,在设置数组之前,不需要声明数组divsList。只是做:
var divsList = document.querySelectorAll(".prefImg");
答案 1 :(得分:1)
不要在头部写这个代码.. 因为这意味着身体还没有加载。 在你的身体标签的末尾做或使用 -
window.addEventListener("load", function()
{
// code here
});
答案 2 :(得分:0)
并非所有浏览器都支持此功能...任何不支持它的浏览器都必须实现自己的浏览器。
function getElementsByClassName(node,classname) {
if (node.getElementsByClassName)
return node.getElementsByClassName(classname);
else {
// custom
}
}
答案 3 :(得分:0)
你可以使用eventhandler来处理window对象的load事件,只在窗口加载完成后运行脚本
function populatePrefsList()
{
var divsList = new Array();
divsList = document.getElementsByClassName("prefImg");
var x = divsList.length;
var i = 0;
for(i=0; i<divsList.length; i++) {
var imgs = divsList[i].getElementsByTagName("img");
var imgSRC = imgs[0].src;
var alt = imgs[0].alt;
var descs = divsList[i].getElementsByTagName("h4");
var desc = descs[0].innerHTML;
//var thisPref = new preference(imgSRC, alt, desc);
//prefsList[i] = thisPref;
}
}
window.onload = function(){
populatePrefsList();
}
答案 4 :(得分:0)
较旧的浏览器(如IE6,IE7,IE8)不支持 getElementsByClassName ,因此返回undefined
。
在较新的浏览器中,返回值绝不是undefined
。它是
主要是HTMLCollection
(但在W3C规范之后它应该是NodeList
)。
https://developer.mozilla.org/en/DOM/document.getElementsByClassName
但我认为在你的情况下,真正的问题是Firebug中的一个错误:
http://code.google.com/p/fbug/issues/detail?id=5336
它已修复且已提交补丁,并将成为 Firebug 1.10a6
的一部分答案 5 :(得分:0)
因为它返回一个HTMLCollection,所以您应该在该行的末尾添加一个[number]
:
divsList = document.getElementsByClassName("prefImg")[0];
另外,最好使用以下方法在完全加载后加载此函数:
window.load = function() {
populatePrefsList();
}