“clone()”在ie6中无法工作

`clone()` not working in Internet Explorer 6

本文关键字:工作 ie6 clone      更新时间:2023-09-26

我试图克隆一个元素,并将其附加到另一个子jQuery语句:

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

其中userListJIdtempOwnJString为元素的id。

以上代码行在Internet Explorer 7和更高版本中工作正常,但在Internet Explorer 6中似乎不起作用。

可能的原因是什么?

我在IE6上使用了clone(),所以这应该不是问题。
也许你正在创建无效的HTML, IE6比IE7更宽松,会抱怨这个问题。
你能给我们看看你的代码和jQuery的版本吗?

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

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

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

解决方法是不克隆对象,至少通过.clone(),而是将您希望克隆的对象的外部HTML作为字符串,并对id属性执行regex .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并没有真正提供)这是最好的猜测。

与@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