您好我正在尝试通过执行以下操作将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);
}
}
我不明白为什么这不起作用。
任何想法?
感谢。
答案 0 :(得分:2)
我假设你的错误在这里:
var tmp = htmlCode;
htmlCode.append(tmp);
此作业不会创建htmlCode
的副本,它会创建一个新的引用。 tmp
和htmlCode
表示同一个对象,因此尝试将对象附加到自身将失败。
您可以使用clone
功能:
var tmp = htmlCode.clone(true);
htmlCode.append(tmp);
将true
传递给clone
也会将附加到对象的所有事件和数据复制到新对象中。
答案 1 :(得分:1)
尝试:
var tmp = htmlCode[0].outerHTML;
htmlCode.append(tmp);
虽然这(我希望)回答了你的问题,但它没有解决一些问题,特别是你正在推送一个与其容器具有相同id的元素,这应该是真的可以避免的。
答案 2 :(得分: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);
要知道,您的代码的想法工作正常,您可以测试以下内容并确保:
<强> e.g:强>
现场演示: 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
变量时,你的返回值有些(可能是错误的)。
以上示例将输出:
希望这会有所帮助: - )