IE中JavaScript DOM ready应用技巧


  本文标签:JavaScript DOM ready

  有时候,如果我们只需要对DOM进行操作,那么这时就没必要等到页面全部加载了,我们需要更快的方法  。Firefox有DOMContentLoaded事件可以轻松解决,可惜的就是IE没有  。

  51CTO推荐阅读:Javascript解决常见浏览器兼容问题

  MSDN关于JavaScript的一个方法有段不起眼的话,当页面DOM未加载完成时,调用doScroll方法时,会产生异常  。那么我们反过来用,如果不异常,那么就是页面DOM加载完毕了!

  1. function IEContentLoaded (w, fn) {   
  2. var d = w.document, done = false,   
  3. // only fire once   
  4. init = function () {   
  5. if (!done) {   
  6. done = true;   
  7. fn();   
  8. }   
  9. };  
  1. // polling for no errors   
  2. (function () {   
  3. try {   
  4. // throws errors until after ondocumentready   
  5. d.documentElement.doScroll(left);   
  6. } catch (e) {   
  7. setTimeout(arguments.callee, 50);   
  8. return;   
  9. }   
  10. // no errors, fire   
  11. init();   
  12. })();  
  1. // trying to always fire before onload   
  2. d.onreadystatechange = function() {   
  3. if (d.readyState == complete) {   
  4. d.onreadystatechange = null;   
  5. init();   
  6. }   
  7. };   

  这个函数是Diego Perini在07年就发布了这个方法,而且获得了广泛认同,以至于现在许多开源框架都是借鉴这种方法,譬如jQuery中的ready  。如果以后需要用到IE的DomReady,就是它了  。用法:

  1. IEContentLoaded( document.getElementById("test") , test );   
  2. function test(){ }