无法将Jquery对象复制到Jquery对象中

时间:2012-08-13 15:01:47

标签: javascript 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 个答案:

答案 0 :(得分:2)

我假设你的错误在这里:

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

此作业不会创建htmlCode的副本,它会创建一个新的引用。 tmphtmlCode表示同一个对象,因此尝试将对象附加到自身将失败。

您可以使用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变量时,你的返回值有些(可能是错误的)。

以上示例将输出:

enter image description here

希望这会有所帮助: - )