2016-02-17 104 views
2

正如你在這個https://jsfiddle.net/yxvwfh6x/中看到的,我試圖在div之後添加一個元素。jQuery insertBefore()insertAfter()之後

var hi = $('<h1>Hi</h1>'); 
var div = $('div'); 
hi.insertAfter(div); 
hi.insertBefore(div); 

在結果insertBefore刪除最後Hi。請嘗試使用此代碼來了解正在發生的事情。

var hi = $('<h1>Hi</h1>'); 
var div = $('div'); 
hi.insertAfter(div); 
setTimeout(function(){ 
    hi.insertBefore(div); 
},1000); 

這是jQuery的bug嗎?

回答

2

因爲hi是指同一個對象,所以下面的序列之後是

  • 第一後加入 - > HI1
  • 後第二相加克隆副本 - > HI2
  • 第一和前添加後移除第一。 - > HI2
  • 增加了一個克隆副本前第二 - > HI3

用這個代替

var div = $('div'); 
$('<h1>Hi</h1>').insertAfter(div); 
$('<h1>Hi</h1>').insertBefore(div); 
+0

這個什麼https://jsfiddle.net/yxvwfh6x/2/ 作爲你的答案,應該刪除所有嗨,然後在第一個元素之前添加 –

+0

@MohammadRezaei它將最後一個克隆的節點添加到div2之後並放置在div1之前。再次檢查我的解釋。 – gurvinder372

+0

@MohammadRezaei更新瞭解釋以解釋克隆和未克隆節點的概念。 – gurvinder372

0
<div class="inner">1</div> 
<div class="inner">2</div> 


$("<h1>Hi</h1>").insertBefore(".inner"); 
$("<h1>Hi</h1>").insertAfter(".inner"); 

試試這個希望它有助於 的jsfiddle:https://jsfiddle.net/ssuryar/336z5pnt/2/

1

不,這是而不是jQuery的bug。這是因爲在執行語句後,現在在DOM中第一次引用'<h1>Hi</h1>'。所以,你可以這樣改:

var h1Text = '<h1>Hi</h1>'; 
var div = $('div'); 
$(h1Text).insertAfter(div); 
$(h1Text).insertBefore(div); 

或者你也可以與您現有的代碼中使用clone()

var hi = $('<h1>Hi</h1>'); 
var div = $('div'); 
hi.insertAfter(div); 
hi.clone().insertBefore(div); 
1
<script> 
var div = $('div'); 
div.insertAfter(div); 
div.insertBefore(div); 
</script>