0

您好我正在尝试通过执行以下操作将 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);
        }
    }

我不明白为什么这不起作用。

有任何想法吗?

谢谢。

4

3 回答 3

2

我假设你的错误在这里:

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

此分配不会创建 的副本htmlCode,而是会创建对它的新引用。tmphtmlCode表示相同的对象,因此尝试将对象附加到自身将失败。

您可以使用以下clone功能:

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

传递trueclone会将附加到对象的任何事件和数据也复制到新对象中。

于 2012-08-13T15:25:58.553 回答
1

尝试 :

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

虽然这(我希望)回答了您的问题,但它并没有解决一些问题,特别是,您正在推送一个与其容器具有相同 id 的元素,这确实应该避免。

于 2012-08-13T15:19:42.710 回答
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变量有关。

上面的示例将输出:

在此处输入图像描述

希望这可以帮助 :-)

于 2012-08-13T15:27:36.253 回答