[英]Insert HTML into page targeting a DIV ID that is added after the DOM has loaded?
我有一個頁面,其中包含一個模態,當單擊每個模態時,該模態會根據AJAX請求生成HTML。
可以在模態注釋內部發布和添加模態注釋; AJAX響應應在此將新注釋插入模態HTML中...
$(result.html).hide().insertBefore('#addCommentContainer').slideDown();
由於某種原因,它不會在新注釋AJAX響應成功時插入HTML。
我認為可能是因為#addCommentContainer
是在加載DOM之后添加的。
因此,與已知的我怎么能在DIV ID后插入HTML #addCommentContainer
時#addCommentContainer
DOM加載后加入?
更新以更好地說明...
1)頁面已加載且DOM已加載
2)發出AJAX請求,將ID為#addCommentContainer
的DIV添加到頁面。
<div id="addCommentContainer">this div was added to page after the dom was loaded from an AJAX request</div>
3)現在,提出了另一個單獨的AJAX請求,試圖將注釋添加到HTML DOM。 對服務器的AJAX reuquest POST注釋和服務器返回成功,並嘗試將注釋HTML附加到ID為#addCommentContainer
的先前DIV中,該ID已在此AJAX請求之前添加到DOM。
這樣做是通過以下jQuery代碼實現的,其中result.html
包含應添加到DOM的注釋HTML:
$(result.html).hide().insertBefore('#addCommentContainer').slideDown();
問題新注釋的此HTML未添加到DOM。 我認為這是因為jQuery找不到#addCommentContainer
因為它是在加載DOM之后添加的。
通常,當我需要使用在DOM加載后添加的元素時,可以使用這樣的document
...。
$(document).on('click', '#addCommentContainer', function(e){
但是,在這種情況下,這不是簡單的click事件,而是需要找到該元素,以便可以向其添加更多HTML。
您可以在第一個AJAX請求的選項中放置async:false。 在我看來,您的第二個請求比第一個請求早返回的可能性很大。 除非另有說明,否則AJAX請求是異步的。 一個更常見的解決方案是將第二個請求放在第一個請求的回調中。
您不能使用ready()或load()函數嗎? 我相信在jquery中創建元素后如何調用函數? 可能包含您要實現的目標的答案。
嘗試將jQuery包裝在$(document).ready(function() {...});
像通常一樣在結束</body>
標記之前(一個安全的假設)。
然后在<script>
塊上使用async
屬性。
例:
<script src="https://cdn.jsdelivr.net/jquery/3.0.0-beta1/jquery.slim.min.js" async></script>
$(document).ready(function() {
$(result.html).hide().insertBefore('#addCommentContainer').slideDown();
....
});
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.