我有这个循环代码来减少我的javascript中的DOM调用,并重用它们。
aarr = [];
for (var z=1; z<=10; z++) {
c = z-1;
aarr[c] = document.getElementById("a"+z);
}
我已经证明,如果代码在DOM完成之前运行,那么数组为null。在最后一个html代码之后移动脚本将起作用。
所以现在我想将此代码放在window.onload
事件中,以便不必将脚本代码移动到页面底部。但它显然不起作用,因为似乎在DOM完成之前执行了数组循环。
window.onload=function(){
var aarr = [];
for (var z=1; z<=10; z++) {
c = z-1;
aarr[c] = document.getElementById("a"+z);
}
}
另外,我试图删除“var”以删除范围而不会产生任何影响。
答案 0 :(得分:2)
您也可以在不使用框架的情况下尝试此方法:
window.onload = (function(){
return function(){
var aarr = [];
for (var z=1; z<=10; z++) {
aarr.push(document.getElementById("a"+z));
alert(aarr[z-1].id);
}
};
})();
答案 1 :(得分:0)
如果您可以使用jquery,那么您可以使用文档就绪监听器:
$(document).ready(function() {
var aarr = [];
for (var z=1; z<=10; z++) {
c = z-1;
aarr[c] = document.getElementById("a"+z);
}
});
根据上面的评论,你试过了吗?
if (document.readyState === "complete") { init(); } // call whatever function u want.
答案 2 :(得分:0)
最好在没有预先扫描dom的情况下使用函数来创建缓存,当您使用具有缓存构造的简单函数时,不需要预扫描。使用jQuery,你可以创建一个这样的函数(下面的本机javascript方法):
window.__jcache = {};
window.$jc = function(u) // jQuery cache
{
if( u == undefined )
{ return window.jQuery; }
if( typeof u == 'object' || typeof u == 'function' )
{ return window.jQuery(u); }
if( window.__jcache[u] == undefined )
{ window.__jcache[u] = window.jQuery(u); }
return window.__jcache[u];
};
或者没有框架(原生javascript):
window.__domcache = {};
window.getObj = function(u) // jQuery cache
{
if( u == undefined )
{ return null; }
if( typeof u == 'object' || typeof u == 'function' )
{ return u; }
if( window.__domcache[u] == undefined )
{ window.__domcache[u] = document.getElementById(u); }
return window.__domcache[u];
};
所以你可以这样做:
var o = $jc('a1'); // for jquery version
var o = getObj('a1'); // The native javascript method (jamex)
这就是诀窍。
Greetz,Erwin Haantjes
答案 3 :(得分:0)
加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。
我猜你尝试在onload之外调用代码。 See this fiddle