2012-08-13 78 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

希望这有助于:-)