2017-05-03 50 views
0

我想在父元素被添加到DOM之後立即將一個表單添加到頁面上的元素。當我提前太早時,即父元素不存在,我會得到一個奇怪的嘗試。jQuery .prepend到不存在的元素 - 它是一個JS錯誤?

jQuery(".myDiv").prepend('<div id="myForm">Content</div>'); 

如果我檢查prepent元素的正確使用jQuery,甚至有JS這樣以後所有腦幹:

var res = document.getElementById("myForm") 
console.log(res); 

我得到控制檯前置元素。但是,如果父元素還不存在,則沒有前插元素出現在頁面上,如果我檢查一秒鐘後相同的元素:

setTimeout(function() { 
    var res = document.getElementById("myForm") 
    console.log(res); 
}, 1000); 

然後我得到

通過這個循環之後當父元素finnaly被添加到頁面時,我的prepend元素不會消失。

所以它看起來像我預先添加到DOM的第一個,但然後發現父元素不存在後被DOM拒絕。但這是一個正常的嘗試嗎?

+0

我似乎無法重現您所描述的內容。 [見這JSFiddle](https://jsfiddle.net/wchs6qen/)瞭解更多信息。 –

回答

0

它工作得很好。

// When div is present 
 
jQuery(".myDiv").prepend('<div id="myForm">Content</div>'); 
 

 
var res = document.getElementById("myForm") 
 
console.log('mydiv:',res); 
 

 
setTimeout(function() { 
 
    var res = document.getElementById("myForm") 
 
    console.log('mydiv:',res); 
 
}, 1000); 
 

 
// When div is not present 
 
jQuery(".noDiv").prepend('<div id="noForm">Content</div>'); 
 

 
var res = document.getElementById("noForm") 
 
console.log('noForm:',res); 
 

 
setTimeout(function() { 
 
    var res = document.getElementById("noForm") 
 
    console.log('noForm:',res); 
 
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="myDiv"></div>

我想你刪除的項目添加的項目之後。這是一個假設

+0

OP說的是,如果在頁面上沒有任何'.myDiv',則document.getElementById(「myForm」)'不會返回'null',如果它在'... prepend (...)' – Titus

+0

不對它給我 –

+0

好吧,父div是由第三方腳本添加的,所以我不確定它會做什麼,它幾乎可以是父div被添加,然後刪除然後再添加。所以阿曼所說的幾乎是正確的事情 – user164863

相關問題