簡體   English   中英

將HTML插入目標為在加載DOM之后添加的DIV ID的頁面中?

[英]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。 在我看來,您的第二個請求比第一個請求早返回的可能性很大。 除非另有說明,否則A​​JAX請求是異步的。 一個更常見的解決方案是將第二個請求放在第一個請求的回調中。

您不能使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM