91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jQuery.fn.load調用時給url加selector之后執行腳本的方法

發布時間:2020-07-09 11:23:59 來源:網絡 閱讀:985 作者:邊城__ 欄目:web開發

調用jQuery.fn.load時是可以在url后面加選擇器來指定加載的內容的。文檔里這樣描述:

默認使用 GET 方式 - 傳遞附加參數時自動轉換為 POST 方式。jQuery 1.2 中,可以指定選擇符,來篩選載入的 HTML 文檔,DOM 中將僅插入篩選出的 HTML 代碼。語法形如 "url #some > selector"。請查看示例。

  1. $("#links").load("/Main_Page #p-Getting-Started li"); 

不過有一個問題,如果指定了選擇器,頁面里的腳本就不會執行,查看了jQuery的代碼之后發現,原來是有選擇器的時候,將所有腳本過濾掉了

jQuery 1.8.3源碼兩個片段: 

  1. rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, // 逗號是因為這是一個語句的一部分 
  1. // See if a selector was specified 
  2. self.html( selector ?
  3.   
  4.     // Create a dummy div to hold the results 
  5.     jQuery("<div>") 
  6.  
  7.         // inject the contents of the document in, removing the scripts 
  8.         // to avoid any 'Permission Denied' errors in IE 
  9.         .append( responseText.replace( rscript, "" ) ) 
  10.  
  11.         // Locate the specified elements 
  12.         .find( selector ) : 
  13.  
  14.     // If not, just inject the full result 
  15.     responseText ); 

那么,如果想執行頁面中的腳本,只需要找到頁面內容中的腳本再執行一次就行了。在load的callback中,是可以取到整個頁面內容的,所以只需要一句話就可以解決:

  1. $("#place_holder").load("Page.html #content"function(html) { 
  2.     // 加載html內容到頁面上,里面的css和script都會執行 
  3.     // 加載之后即把當前的臨時DIV刪掉(沒驗證,如果有問題可以不remove) 
  4.     $("<div>").html(html).remove(); 
  5. }); 

不過既然jQuery要把腳本過濾掉就有它的道理……因為html里的css和script有可能會有一部分是不想調用的,怎么處理呢?用與jQuery過濾script的類似的辦法,把所有script找出來,再選出需要執行的來執行。

于是,約定,在script中加入一個屬性loadinvoke="true"的會在加載內容后執行,如定義這樣的<script>:

  1. <script type="text/javascript"> 
  2.     console.log("這是不需要jQuery.fn.load時執行的腳本") 
  3. </script> 
  4.  
  5. <script type="text/javascript" loadinvoke="loadinvoke"> 
  6.     console.log("這是需要jQuery.fn.load時執行的腳本") 
  7. </script> 

給加載的腳本加點料:

  1. rscript = /<script\b[^>]*\b loadinvoke \b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi; 
  2.  
  3. $("#place_holder").load("Page.html #content"function(html) { 
  4.     // 找出符合條件的腳本 
  5.     var m = html.match(rscript); 
  6.     for (var i = 0; i < m.length; i++) { 
  7.         // 生成臨時的div執行腳本 
  8.         $("<div>").html(m[i]).remove(); 
  9.     } 
  10. }); 

拋磚引玉

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍城县| 荣成市| 石狮市| 西吉县| 北海市| 驻马店市| 台江县| 刚察县| 拉孜县| 西和县| 德格县| 万山特区| 兴文县| 罗源县| 延边| 贡觉县| 南漳县| 丰镇市| 阳东县| 东乡| 张家港市| 海晏县| 巍山| 南陵县| 雅江县| 宣城市| 五莲县| 河源市| 米易县| 铜川市| 平昌县| 中江县| 张家界市| 昭觉县| 焦作市| 沙田区| 崇信县| 皋兰县| 古交市| 当雄县| 陆川县|