2012-08-13 79 views
0

你好我想裏面插入另一個jQuery對象通過執行以下操作:不能一個jQuery對象複製到一個jQuery對象

var htmlCode = $("<div id='"+data.layoutDescriptions[i].id+"'></div");   
if(data.contentRef == "RecursiveContactSubForm"){ 
     if(htmlArray[2]){ 
      alert("in here"); 
     htmlCode.append(htmlArray[2]); 
     } 
     else{ 
      alert("in here2"); 
      var tmp = htmlCode; 
      htmlCode.append(tmp); 
     } 
    } 

我不明白爲什麼這是行不通的。

有什麼想法?

謝謝。

+3

@Pekka「內容DOM元素,HTML字符串,**或jQuery對象**在插入匹配元素集合中每個元素的結尾「。 – 2012-08-13 15:03:58

+0

@安東尼哎呀!也許我應該學會閱讀。 – 2012-08-13 15:04:20

+0

jQuery API文檔聲明'append'可以接受一個jQuery對象 – 2012-08-13 15:04:51

回答

2

我假設你的錯誤是在這裏:

var tmp = htmlCode; 
htmlCode.append(tmp); 

這種分配不會創建的htmlCode副本,它會創建一個新的參考吧。 tmphtmlCode表示相同的對象,因此嘗試將對象附加到自身將失敗。

可以使用clone功能:

var tmp = htmlCode.clone(true); 
htmlCode.append(tmp); 

傳遞trueclone將複製粘貼到物品進入新的對象,以及任何事件和數據。

1

嘗試:

var tmp = htmlCode[0].outerHTML; 
htmlCode.append(tmp); 

雖然這(我希望)回答你的問題,但沒有解決的一些問題,尤其是你正在推動具有相同ID作爲容器的元素,它確實應該應避免。

1

那麼,可能的事情可以做(因爲你的代碼邏輯似乎不錯):

(1)檢查返回值,以確保如果這是你所期望的。

console.log(htmlCode); 
console.log(data.contentRef); 
console.log(htmlArray[2]); 
console.log(tmp); 

(2)檢查瀏覽器控制檯,尋找另一種錯誤的(也許你有一些其他的JavaScript代碼語法錯誤)。

(3)一個可能的錯誤可能是在tmp可變部分的分配,正確的方法是使用clone()

var tmp = htmlCode.clone(true); 

只知道,你的代碼的思想工作罰款,你可以測試以下,並確保:

如:

現場演示:http://jsfiddle.net/FYC7L/

var htmlArray = new Array("<div id='newElement_1'>Element 1</div>", "<div id='newElement_2'>Element 2</div>", "<div id='newElement_3'>Element 3</div>"); 

var htmlCode = $("<div id='test'>Test</div>");   

if(htmlArray[2]){ 
    htmlCode.append(htmlArray[2]); 
} 

console.log(htmlCode); 

正如你可以看到這是工作,所以有一些(也許是錯誤的)與我在文章的第一部分與tmp寫或者你的返回值變量。

上例將輸出:

enter image description here

希望這有助於:-)