boxes的值为何会自动追加

boxes的值为何会自动追加

var a=0;
window.onload = function() {
  //获得外层以及每一个盒子
  var container = document.getElementById('wrap');
  var boxes = container.getElementsByTagName('div');
   //运行瀑布流主函数
   waterfall(container, boxes);
   console.log(++a);
   //模拟数据
   var data = [{
       "src": "1.png",
       "title": "第一怪 竹筒当烟袋"
   }, {
       "src": "2.png",
       "title": "第二怪 草帽当锅盖"
   }];

   //设置滚动加载
   window.onscroll = function() {
       //校验数据请求
       if (getCheck()) {
           //var wrap = container;
           for (i in data) {
               //创建figure
               var figure = document.createElement('div');
               container.appendChild(figure);
               //创建img
               var img = document.createElement('img');
               img.src = 'images/' + data[i].src;
               //img.style.height = 'auto';
               figure.appendChild(img);
               //创建a标记
               var a = document.createElement('a');
               a.href = "http://www.imooc.com";
               a.target = "_blank";
               a.innerHTML = data[i].title;
               figure.appendChild(a);
           };
           console.log(boxes.length);
           waterfall(container, boxes);
       };
   };
};

滚动追加元素后,boxes的值为什么也会自动追加呢?


jQuery

window.onload=function(){
   var warp=$('#container'),
       box=warp.children('div');
   waterfall(warp,box);
   var data = [{
       "src": "1.png",
       "title": "第一怪 竹筒当烟袋"
   }, {
       "src": "2.png",
       "title": "第二怪 草帽当锅盖"
   }];
   //追加图片
   $(document).scroll(function(){
      if($(this).scrollTop()+$(window).height()>=$(this).height()){
          for(var i=0;i<data.length;i++){
               warp.append('<div><a href="#"><img src="img/'+data[i].src+'" alt=""><span>'+data[i].title+'</span></a></div>');
          }
          box=warp.children('div');//
有什么办法可以像js一样省掉这一步           

          waterfall(warp,box);
      }
   });
};

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

var boxes = container.getElementsByTagName('div');”获取到的是个数组对象,可以按照你的第二种方式理解的 


  • qq_天陨_0 提问者 #1
    请问,如何用jQuery达到同样的效果
    2018-01-18 21:58:05
海纳百川_ 2018-01-19 14:20:37

每种方式都有它的益处和弊端,用jQuery方式的话,必须要重新获取一下div元素。

  • 提问者 qq_天陨_0 #1
    好的,非常谢谢
    2018-01-19 15:12:41
海纳百川_ 2018-01-19 11:14:11

你粘贴的这些代码乱乱的,你是想省略哪一步呀

  • 提问者 qq_天陨_0 #1
    用js滚动追加元素后,boxes的值会自动追加。 用jQuery怎样实现同样的自动追加
    2018-01-19 11:18:01
海纳百川_ 2018-01-19 10:06:21

就把里面用到的一些方法,获取元素的方式呀,宽度高度的获取什么的,换成jquery的方式就行了。总体的写法还是和原生的一样的,只是使用jquery会将代码简化些。

  • 提问者 qq_天陨_0 #1
    window.onload=function(){ var warp=$('#container'), box=warp.children('div'); waterfall(warp,box); //追加图片 $(document).scroll(function(){ if($(this).scrollTop()+$(window).height()>=$(this).height()){ for(var i=0;i<data.length;i++){ warp.append('<div><a href="#"><img src="img/' + data[i].src+'" alt=""><span>'+data[i].title+'</span></a></div>'); } box=warp.children('div'); //有什么办法可以像js一样省掉这一步 waterfall(warp,box); } }); };
    2018-01-19 11:04:27
怎么都被占用了呢 2018-01-18 14:00:26

因为这一步呀

container.appendChild(figure);

滚动的时候,如果符合追加的条件,就创建div,然后添加到container盒子内,boxes是container中所有的子div,数量肯定是在增加的呀

  • 提问者 qq_天陨_0 #1
    就是这里没懂,“var boxes = container.getElementsByTagName('div');”只获取了一次,“container.appendChild(figure);”是添加到dom里。boxes为什么会动态变化?js调用boxes的时候是会重新操作dom获取“div”;还是boxes相当于是一个指针指向div元素,而div元素在浏览器中分配了一个地址呈有规则的排列。
    2018-01-18 14:20:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师