javascript返回可见网页区域的元素dom树

/**
 *以DocumentFragment(即一个document)返回可见区域
 * return DocumentFragment
 * yuanjq
 **/

var VDFragment = {};
  VDFragment.Document =  function(iWindow){
    this.oFrag = document.createDocumentFragment();
     this.Init = function(){
     var r1 = iWindow.document.body.createTextRange();
    var r2 = iWindow.document.body.createTextRange();
    if(r2.htmlText=="") return false;
    try{
      r2.moveToPoint(0, 0);     
     r1.setEndPoint("StartToStart", r2);
     //html头中是否有doctye时引起的html版本问题修正
     if(iWindow.document.documentElement){
       var offsetHeight = iWindow.document.documentElement.offsetHeight - 5;//此处减(>=1)才能实现取到可见区域的内容,原因未查明
       r2.moveToPoint(iWindow.document.documentElement.offsetWidth,offsetHeight);
     }else{
       var offsetHeight = iWindow.document.body.offsetHeight - 5;//此处减(>=1)才能实现取到可见区域的内容,原因未查明
       r2.moveToPoint(iWindow.document.body.offsetWidth,offsetHeight);
     }
     r1.setEndPoint("EndToEnd", r2);
    }catch(e){
     //window.status = e.message;
    }
    var htmlText =  r1.htmlText; 
    var op=document.createElement("<DIV id='frag_content'></DIV>");
    op.innerHTML =  htmlText;
   this.oFrag.appendChild(op);
   return this.oFrag;
    }
 //提取给定html标签的对象元素数组
 this.getElementsByTagName = function(TagName){
  return this.oFrag.getElementsByTagName(TagName);
 }
 //提取给定id的对象元素
 this.getElementById = function(id){
  return this.oFrag.getElementById(id);
 }
 return this.Init();
}

使用如下

 var documentFragment =   new VDFragment.Document(window);
 if(documentFragment && documentFragment.getElementById("frag_content")){
  var imgs = documentFragment.getElementsByTagName("img");

  alert(imgs.length);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值