Jquery load()方法加载html片段

本文探讨在导航栏中实现点击切换不同内容区,并带有下拉分页异步刷新效果的问题。传统的ajax方法在切换导航时无法正确加载动态数据,但通过Jquery的load()方法,成功地加载了包括下拉分页在内的完整HTML片段,解决了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一个案例中用的ajax加载html片段实现导航的切换,这次的这个案例用同样的方法却不是很好实现。

案例:在一个导航栏中,实现点击导航出现不同的选择区域,而且每个页面都有下拉分页异步刷新的效果。如图:

                

图1       图2

                 

图3 图4

上图中,图2和图4都有下拉分页异步刷新的效果,也就是只要有数据,我们可以一直下拉一直加载数据出来,在前面的《jquery.lazyload.min和jquery-jtemplates在Ajax加载页面的应用》这篇博客里面讲到了下拉分页异步刷新的实现方法。

如果我们这次还是使用ajax异步加载html片段的方法,会发现当我们切换导航的时候,图2上半部分可以加载出来,图4是图2下拉分页的下半部分却加载不出来而显示的是空白的,即使在图2的html片段里面引用了下拉分页的JS同样还是显示不出来。然后我觉得,可能是ajax异步加载html片段只能加载静态的数据而不好加载动态刷新的数据,不然也不是只加载出来了一部分。后来用了另外一种方法实现了html片段的加载。

主页面HTML的部分代码:

<body>
   <div class="teBuyNav">
      <ul>
         <li class="cur" onclick="temp(0);$(this).addClass('cur');">特卖</li>
         <li class="" onclick="temp(1);$(this).addClass('cur');">用品</li>
         <li class="" onclick="temp(2);$(this).addClass('cur');">玩具</li>
         <li class="" onclick="temp(3);$(this).addClass('cur');">居家</li>
         <li class="" onclick="temp(4);$(this).addClass('cur');">食品</li>
      </ul>
   </div>
    <div class="main" id="temp"> //需要替换的Div   
        <div class="promotion">
           <div class="flashBuy">
              <div class="box" onclick="window.location='teBuyList.html'"> 
                 <h3>限时秒杀</h3>
                 <p>多梅西宽口PP奶瓶</p>
                 <div class="price">
                    <h1><b></b>88.8</h1>
                    <p>抢购中</p>
                 </div>
                 <div class="showTime"><span>距离结束</span><input type="text" id="time_h">:<input type="text" id="time_m">:<input type="text" id="time_s"></div>
                 <img src="../images/tebuy/ms.png" alt="" />
              </div>
           </div>
           <div class="marketing">
              <div class="w50" onclick="window.location='teBuyListTwo.html'">
                 <div class="box btLine">
                    <h3 style="color:#f18c1a">新品首发</h3>
                    <p>育儿推荐爆款</p>
                    <img src="../images/tebuy/p1.png" alt="" />
                 </div>
              </div>
              <div class="w50" onclick="window.location='teBuyListTwo.html'">
                 <div class="box btLine">
                    <h3 style="color:#ec6b42">最热门</h3>
                    <p>多款遥控卡通车</p>
                    <img src="../images/tebuy/p2.png" alt="" />
                 </div>
              </div>
              <div class="w50" onclick="window.location='teBuyListTwo.html'">
                 <div class="box">
                    <h3 style="color:#e95072">超值限量</h3>
                    <p>精品乳制品</p>
                    <img src="../images/tebuy/p3.png" alt="" />
                 </div>
              </div>
              <div class="w50" onclick="window.location='teBuyListTwo.html'">
                 <div class="box">
                    <h3 style="color:#4a64ae">海外优品</h3>
                    <p>营养又好吃</p>
                    <img src="../images/tebuy/p4.png" alt="" />
                 </div>
              </div>
           </div>          
           <br style="clear:both;" />
        </div>
    <!-- goodShow end -->
      <div class="swiper-pagination2"></div>
   </div>
    
   <div class="tebuyTit"><h1><span></span>精品特卖</h1></div>
   <p style="display:none">
   <textarea id="Template-Items" rows="0" cols="0" >
      <!--
	// jquery.lazyload.min和jquery-jtemplates里面的语法,实现图2的下拉分页
      {#foreach $T.Items as apple}
          <div class="saleBar">
            <div class="pic"><img class="lazy" src="{$T.apple.Img}" alt="" /></div>
            <div class="txt"><h2 class="nam">{$T.apple.Name}</h2> <span class="dat"><b>{$T.apple.days}</b></span><br style="clear:both;"></div>
         </div>
      {#/for}

   -->
      </textarea>
   </p>
      <!-- Output elements -->
      <div id="Items" class="Content">

      </div>

      <div class="loading"><img src="../images/preloader.gif" alt="" /></div>
    
   </div>
    <!--}}main--> 
</body>
 

JS代码如下:

<script>
function temp(a){
   if(a==0){
      $("#temp").load('tempIndex.html');
      $(".teBuyNav li").removeClass("cur");
      }
   if(a==1){
       $("#temp").load('tempClass.html');
       $(".teBuyNav li").removeClass("cur");
   }
    if(a==2){
        $("#temp").load('tempClass.html');
        $(".teBuyNav li").removeClass("cur");
    }
    if(a==3){
        $("#temp").load('tempClass.html');
        $(".teBuyNav li").removeClass("cur");
    }
    if(a==4){
        $("#temp").load('tempClass.html');
        $(".teBuyNav li").removeClass("cur");
    }
}
</script>

运用load()方法将id=temp的Div里面的内容换成html片段,即tempIndex.html和tempClass.html片段。


tempIndex.html代码如下:

<meta charset="utf-8">
<script>
$(function() {
   //set template and process
   $("#Items").setTemplateElement("Template-Items").processTemplateURL("index.json");
});
//next page load
$(function(){
   $(window).scroll(function(){
      // 当滚动到最底部以上100像素时, 加载新内容
      if ($(document).height() - $(this).scrollTop() - $(this).height()<10){
         loadMore();
      }

   });
});

$(function() {
   $("img").lazyload({
      placeholder : "../images/preloader.gif",
      event : "click"
   });
});

function loadMore(){
   $.ajax({
      type: "post",
      contentType: "application/json",
      url: "index.json",
      beforeSend: function () {
         $(".loading").show();
      },
      success: function (data) {
         $("#Items").append("<div class='more'></div>");
         var lastDiv = $(".more:last")//chose last div has class more
         $(lastDiv).setTemplateElement("Template-Items").processTemplateURL("index.json");
      },
      complete: function () {
         $(".loading").hide();
      },
      error: function (data) {
         console.info("error: " + data.responseText);
      }
   });
}

$(function() {
   $("img.lazy").lazyload({

      effect : "fadeIn"
   });
});
</script>
<div class="promotion"> <div class="flashBuy"> <div class="box" onclick="window.location='teBuyList.html'"> <h3>限时秒杀</h3> <p>多梅西宽口PP奶瓶</p> <div class="price"> <h1><b></b>88.8</h1> <p>抢购中</p> </div> <div class="showTime"><span>距离结束</span><input type="text" id="time_h">:<input type="text" id="time_m">:<input type="text" id="time_s"></div> <img src="../images/tebuy/ms.png" alt="" /> </div> </div> <div class="marketing"> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#f18c1a">新品首发</h3> <p>育儿推荐爆款</p> <img src="../images/tebuy/p1.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box btLine"> <h3 style="color:#ec6b42">最热门</h3> <p>多款遥控卡通车</p> <img src="../images/tebuy/p2.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#e95072">超值限量</h3> <p>精品乳制品</p> <img src="../images/tebuy/p3.png" alt="" /> </div> </div> <div class="w50" onclick="window.location='teBuyListTwo.html'"> <div class="box"> <h3 style="color:#4a64ae">海外优品</h3> <p>营养又好吃</p> <img src="../images/tebuy/p4.png" alt="" /> </div> </div> </div> <br style="clear:both;" /> </div> <!-- goodShow end --> <div class="tebuyTit"><h1><span></span>精品特卖</h1></div> <p style="display:none"> <textarea id="Template-Items" rows="0" cols="0" > <!--
	// jquery.lazyload.min和jquery-jtemplates里面的语法,实现图2的下拉分页
{#foreach $T.Items as apple} <div class="saleBar"> <div class="pic"><img class="lazy" src="{$T.apple.Img}" alt="" /></div> <div class="txt"><h2 class="nam">{$T.apple.Name}</h2> <span class="dat"><b>{$T.apple.days}</b></span><br style="clear:both;"></div> </div> {#/for} --> </textarea> </p> <!-- Output elements --> <div id="Items" class="Content"> </div> <div class="loading"><img src="../images/preloader.gif" alt="" /></div>

tempClass.html代码如下
<script>
$(function() {
   //set template and process
   $("#Items").setTemplateElement("Template-Items").processTemplateURL("teBuyListTwo.json");
});

//format SalesPrice
function formatSalesPrice(date) {
   return date.replace('.','.<i>');
}

//next page load
$(function(){
   $(window).scroll(function(){
      // 当滚动到最底部以上100像素时, 加载新内容
      if ($(document).height() - $(this).scrollTop() - $(this).height()<10){
         loadMore();
      }

   });
});

$(function() {
   $("img").lazyload({
      placeholder : "../images/preloader.gif",
      event : "click"
   });
});

function loadMore(){
   $.ajax({
      type: "post",
      contentType: "application/json",
      url: "teBuyListTwo.json",
      beforeSend: function () {
         $(".loading").show();
      },
      success: function (data) {
         $("#Items").append("<div class='more'></div>");
         var lastDiv = $(".more:last")//chose last div has class more
         $(lastDiv).setTemplateElement("Template-Items").processTemplateURL("teBuyListTwo.json");
      },
      complete: function () {
         $(".loading").hide();
      },
      error: function (data) {
         console.info("error: " + data.responseText);
      }
   });
}

$(function() {
   $("img.lazy").lazyload({

      effect : "fadeIn"
   });
});
</script>
   <div class="classBanner">
      <img src="../images/tebuy/food.jpg" alt="" />
   </div>
   <div class="teBuyBar">
      <ul>
         <li><div class="line"><div class="txt"><h1>休闲零食休闲零食休闲零食休</h1><p>好吃不贵</p></div><div class="pic"><img src="../images/tebuy/food1.jpg" alt="" /></div></div></li>
         <li><div class="line"><div class="txt"><h1>营养品</h1><p>呵护宝宝健康成长</p></div><div class="pic"><img src="../images/tebuy/food2.jpg" alt="" /></div></div></li>
         <li><div class="line"><div class="txt"><h1>辅食</h1><p>环保健康</p></div><div class="pic"><img src="../images/tebuy/food3.jpg" alt="" /></div></div></li>
         <li><div class="line"><div class="txt"><h1>进口美食</h1><p>不知是鲜美</p></div><div class="pic"><img src="../images/tebuy/food4.jpg" alt="" /></div></div></li>
         <li style="clear:both"></li>
      </ul>
   </div>
      <!-- Templates -->
      <p style="display:none">
          <textarea id="Template-Items" rows="0" cols="0" >
         <!--
	    // jquery.lazyload.min和jquery-jtemplates里面的语法,实现图4的下拉分页		
         {#foreach $T.Items as apple}
               <div class="goodsList">
                  <ul>
                     <li>
                        <a href="#"><img class="lazy" src="{$T.apple.Img}" alt=""></a>
                        <p><a href="#">{$T.apple.Name}</a></p>
                        <p><span class="red"><i>&yen;</i>{formatSalesPrice($T.apple.SalesPrice)}</i></span><span class="oldPrice"><i>&yen;</i>{$T.apple.OldPrice}</span></p>
                     </li>
                     <li>
                        <a href="#"><img class="lazy" src="{$T.apple.Img2}" alt=""></a>
                        <p><a href="#">{$T.apple.Name2}</a></p>
                        <p><span class="red"><i>&yen;</i>{formatSalesPrice($T.apple.SalesPrice)}</i></span><span class="oldPrice"><i>&yen;</i>{$T.apple.OldPrice}</span></p>
                     </li>
                  </ul>
               </div>
         {#/for}
         -->
          </textarea>
      </p>
      <!-- Output elements -->
      <div id="Items" class="Content">

      </div>

      <div class="loading"><img src="../images/preloader.gif" alt="" /></div>


通过load()方法也能加载html片段而且能加载出图4的下拉分页效果,ajax的方法却不能加载出图4的下拉分页效果,这其中的原因也不是很清楚,姑且先拿load()方法用着吧。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值