`clone()`无法在Internet Explorer 6中运行

时间:2011-11-10 15:21:10

标签: javascript jquery internet-explorer-6

我试图克隆一个元素并将其附加到另一个具有以下jQuery语句的子节点:

$(userListJId).clone().appendTo(tempOwnJString);

其中userListJIdtempOwnJString是元素的ID。

上述代码行在Internet Explorer 7及其更高版本中运行良好,但似乎无法在Internet Explorer 6中运行。

可能的原因是什么?

3 个答案:

答案 0 :(得分:0)

我在IE6上使用了clone(),因此不应该是问题 也许你是无效的HTML和IE6,它比IE7抱怨的更不宽容 你能告诉我们你的代码以及jQuery的版本吗?

答案 1 :(得分:0)

你应该问这个很有趣,因为我有一个非常相似的问题(尽管它影响了IE7,可能还有IE6)。

另外,不确定你是否做了一些特殊的事情(即定义变量),但也许你应该将对象称为$('#userListJId')而不仅仅是元素名称。同样,我看不到代码的其余部分,因此您可能已经在文档之外定义了这些变量。* scope。

基本上,在IE中,创建对象后无法修改某些属性,例如ID属性。

解决方法是不克隆对象,至少通过.clone(),但是要将要克隆的对象的外部HTML作为字符串并在id属性上执行正则表达式.replace(),然后将修改后的HTML附加到tempOwnJString。

IE中的另一个问题是,有时(通常是?)在解析HTML时,如果它们只包含字母数字字符,则不会在属性值周围包含引号,因此请在正则表达式模式中注意这一点。

以下是我使用的一些代码示例。

    if ($.browser.msie === true)
        {
//unfortunately jQuery doesn't have an outerHTML function, so this is a hacky work around
                templateHTML =  $("#activityTemplate").clone().wrap('<div>').parent().html();

                newHTML = templateHTML.replace(/id\=\w+/ig, 'id='+jsonObj.ContactLogID); 
                $(newHTML).prependTo($("#activityContainer"));
// in case i need to refer to newly created object      
                clone = $("#"+jsonObj.ContactLogID); 
        }

同样,我不能肯定地说这是你遇到的问题,但是你提供的信息和没有任何调试信息(IE6实际上并没有真正提供)这是最好的猜测。

答案 2 :(得分:0)

回应@Foxtrot所说的内容,你需要确保你在克隆元素上设置id,否则你就会把IE6搞砸了。毕竟,所有浏览器都遵循标准,即ID必须是唯一的。他们违反此行为时的行为会有所不同。您遇到了变化。

作为一个简单的例子:

var clone = $(userListIJD).clone();
clone[0].id = 'somethingElse'; // use a formula here, as presumably this is run over and over
// proceed with appending the clone