溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用jQuery中l(wèi)oad方法設(shè)計(jì)動(dòng)態(tài)加載及解決被加載頁(yè)面js失效的問(wèn)題

發(fā)布時(shí)間:2021-07-12 15:01:05 來(lái)源:億速云 閱讀:214 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹了如何使用jQuery中l(wèi)oad方法設(shè)計(jì)動(dòng)態(tài)加載及解決被加載頁(yè)面js失效的問(wèn)題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、問(wèn)題分析

對(duì)于后臺(tái)系統(tǒng),相比大家都有所印象,知道其中的布局結(jié)構(gòu),如圖:

如何使用jQuery中l(wèi)oad方法設(shè)計(jì)動(dòng)態(tài)加載及解決被加載頁(yè)面js失效的問(wèn)題

在這種布局中我們需要將header,sidebar,footer分開(kāi),而且對(duì)于中間部分的content內(nèi)容需要?jiǎng)討B(tài)變化,即根據(jù)不同菜單定位到不同頁(yè)面,而整體布局不會(huì)變化

這種布局結(jié)構(gòu)對(duì)于單純的HTML不具備這種嵌入各部分內(nèi)容的能力,所以就需要我們自己來(lái)尋找或者解決這種問(wèn)題,由于jquery的兼容性和使用廣度比較不錯(cuò),這里

使用jquery的load方法來(lái)處理這種頁(yè)面布局框架。

二、load方法詳解

1.定義

  $(selector).load(URL,data,callback);

  必需的 URL 參數(shù)規(guī)定您希望加載的 URL。

  可選的 data 參數(shù)規(guī)定與請(qǐng)求一同發(fā)送的查詢字符串鍵/值對(duì)集合。

  可選的 callback 參數(shù)是 load() 方法完成后所執(zhí)行的函數(shù)名稱。

 2.示例

也可以把 jQuery 選擇器添加到 URL 參數(shù)。

    下面的例子把 "demo_test.txt" 文件中 id="p1" 的元素的內(nèi)容,加載到指定的 <div> 元素中:

    $("#div1").load("demo_test.txt #p1");

可選的 callback 參數(shù)規(guī)定當(dāng) load() 方法完成后所要允許的回調(diào)函數(shù)?;卣{(diào)函數(shù)可以設(shè)置不同的

$("#div1").load("demo_test.txt",function(responseTxt,statusTxt,xhr){
 if(statusTxt=="success")
  alert("外部?jī)?nèi)容加載成功!");
 if(statusTxt=="error")
  alert("Error: "+xhr.status+": "+xhr.statusText);
 });

三、布局框架load的使用

1.問(wèn)題

  網(wǎng)上很多人在使用load方法加載動(dòng)態(tài)頁(yè)面的時(shí)候遇到一個(gè)普遍的問(wèn)題,就是在被加載頁(yè)面中的JavaScript代碼失效,這是因?yàn)閘oad加載的外部文件會(huì)把Script部分刪除掉,所以被加載頁(yè)面中調(diào)用該頁(yè)面的JavaScript的時(shí)候就會(huì)出現(xiàn)xxxfunction未定義。

2.解決

對(duì)于header,sidebar,footer這種只包含靜態(tài)HTML代碼的部分直接使用load加載

對(duì)應(yīng)中間content變化的內(nèi)容,一般都會(huì)包含對(duì)應(yīng)的JavaScript代碼,使用自定義的load方法(如下代碼),在使用jquery.load()方法加載對(duì)應(yīng)的內(nèi)容的同時(shí),使用load的回調(diào)方法處理JavaScript的加載,將被加載頁(yè)面的JavaScript代碼加載到布局頁(yè)面的<div id="content"></div>中這樣每次load()的時(shí)候content的內(nèi)容都會(huì)被覆蓋,所以也不必?fù)?dān)心重復(fù)加載的問(wèn)題。這樣就完美解決被加載頁(yè)面js失效的問(wèn)題。具體代碼如下所示:

四、代碼示例

布局頁(yè)面:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <!-- Tell the browser to be responsive to screen width -->
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <!-- Bootstrap 3.3.6 -->
  <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css" rel="external nofollow" >
 </head>
 <body class="hold-transition skin-blue-light sidebar-mini" onload="onload();">
  <div class="wrapper">
   <div id="header">
   </div>
   <!-- Left side column. contains the logo and sidebar -->
   <div id="sidebar">
   </div>
   <!-- Content Wrapper. Contains page content -->
   <div id="content" class="content-wrapper clearfix">
    <!-- Content Header (Page header) -->
   </div>
   <!-- /.content-wrapper -->
   <div id="footer">
   </div>
   <!-- Add the sidebar's background. This div must be placed
  immediately after the control sidebar -->
   <div class="control-sidebar-bg"></div>
  </div>
  <!-- ./wrapper -->
  <!-- jQuery 2.2.3 -->
  <script src="../resources/plugins/jQuery/jquery-2.2.3.min.js"></script>
  <!-- Bootstrap 3.3.6 -->
  <script src="../resources/bootstrap/js/bootstrap.min.js"></script>
  <!--左側(cè)菜單-->
  <script src="../resources/dist/js/common/global.js"></script>
  <script src="../resources/dist/js/menu/menuTemplate.js"></script>
  <script src="../resources/dist/js/menu/menu.js"></script>
 </body>
<script>
 //加載頁(yè)面布局的header,sidebar,footer的內(nèi)容
 $("#header").load("inc/header.html");
 $("#sidebar").load("inc/sidebar.html");
 $("#footer").load("inc/footer.html");
 /*
 *加載變換內(nèi)容,主要url參數(shù)為dom對(duì)象,并且該dom中的url放在href中,
 *調(diào)用方式如:<span onclick="javascript:load(this);" href="/backstage/website/test.html" rel="external nofollow" rel="external nofollow" >測(cè)試</span>
 *注意:1.該dom對(duì)象最好不要用a標(biāo)簽,因?yàn)辄c(diǎn)擊a標(biāo)簽會(huì)進(jìn)入href指定的頁(yè)面
 *  2.要加載的內(nèi)容要用 id="content" 標(biāo)注,因?yàn)閘oad中指明了加載頁(yè)面中指定的id為content下的內(nèi)容
 * 3.對(duì)應(yīng)頁(yè)面的JavaScript寫(xiě)在content下
 */
 function load(url, data){
  //alert($(url).attr("href"));
  $.ajaxSetup({cache: false });
  $("#content").load($(url).attr("href")+ " #content ", data, function(result){
   //alert(result);
   //將被加載頁(yè)的JavaScript加載到本頁(yè)執(zhí)行
   $result = $(result); 
   $result.find("script").appendTo('#content');
  });
 }
</script>
</html>

被加載頁(yè)面:

<div id="content">
 <div>測(cè)試二</div>
 <span onclick="javascript:load(this);" href="/backstage/website/test.html" rel="external nofollow" rel="external nofollow" >測(cè)試</span>
 <a href="javascript:test();" rel="external nofollow" >測(cè)試</a>
 <script>
  function test(){
   alert("測(cè)試二頁(yè)面");
  }
 </script>
 <script>
  function test2(){
   alert("ceshi");
  }
 </script>
</div>

效果截圖:

如何使用jQuery中l(wèi)oad方法設(shè)計(jì)動(dòng)態(tài)加載及解決被加載頁(yè)面js失效的問(wèn)題

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用jQuery中l(wèi)oad方法設(shè)計(jì)動(dòng)態(tài)加載及解決被加載頁(yè)面js失效的問(wèn)題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI