2016-07-27 71 views
-1

我有一個頁面使用ID在同一個域上呈現來自另一個頁面的HTML塊。我當前的代碼:在DOM就緒之前使用jQuery加載函數

<div id=」testdiv」></div> 
<script> 
jQuery(document).ready(function(){ 
    jQuery('#testdiv').load('/references/embed1.html #testdiv2'); 
}); 
</script> 

雖然這正確加載內容,還有就是對網頁加載和jQuery的內容加載之間的可見滯後;取決於DIV的內容,它有時會顯示一秒鐘,然後彈出到位。這顯然是由於該頁面在DOM Ready之前不會嘗試檢索HTML內容,所以我刪除了ready函數,但Load函數不運行。如果我使用iFrame,它會在瀏覽器執行代碼時加載,但我失去了僅包含特定DIV ID的功能,並且很難使其響應。看着$ .ajax,但顯然Load使用.ajax,所以它看起來不會有什麼區別。

簡單地說 - 如何從另一個頁面加載特定的DIV ID而無需等待DOM Ready是否使用jQuery,JavaScript,iFrames或其他方法?第二個問題

感謝

+0

簡單...刪除'jQuery的(文件)。就緒(函數(){',它應該能正常運行*如果你的代碼是** **正是因爲它是在你的問題*。但請注意,但可能仍然有一個延遲,你不能刪除,而不是刪除需要使用Ajax來獲得這個內容的第一個地方。 –

+0

爲什麼投票表決? dom準備好了並不適用於我。此外,這篇文章http://stackoverflow.com/questions/15107074/jquery-load-not-working指出了同樣的問題,並且解決方法是DOM準備好了。 – user1754738

+1

它應該工作正常。如果沒有,這意味着您的問題中的示例與您實際使用的代碼不匹配。腳本相對於dom元素的位置非常重要。 –

回答

-4

Ajax不是即時的,你做什麼都改變這種狀況。因此,總會有某種形式的延遲。您可以通過消除$(document).ready()的需要來減少延遲,但是我懷疑它還不足以讓它達到您希望的效果。

$.get('page.html', function (result) { 
    // note, you may need to use `.filter` rather than `.find` depending on the structure of `result` 
    $('#target').html($($.parseHTML(result)).find('#target2')); 
}); 

或留下你的代碼是負$(document).ready,並將其移動到目標後的div就像在你的榜樣。

完全消除延遲的唯一方法是通過將html直接插入到頁面服務器端來消除使用$.ajax的需要。

-2

document ready將被觸發,直到整個頁面加載完畢,只需將其刪除,#testdiv已在DOM上完成呈現後調用​​。 這裏的例子

<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 

<div id="testdiv"></div> 
<div id="error"></div> 

<script> 
$("#testdiv").load("/references/embed1.html #testdiv2", function(response, status, xhr) { 
    alert("Triggered"); 
    if (status == "error") { 
    var msg = "Err trying to load "; 
    $("#error").html(msg + xhr.status + " " + xhr.statusText); 
    } 
}); 
</script> 

https://jsfiddle.net/Angel_xMu/rer3yuny/1/

相關問題