2011-11-10 125 views
2

我试图克隆一个元素,并将其与下面的jQuery的声明追加到另一个孩子:'克隆()`无法在Internet Explorer工作6

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

userListJIdtempOwnJString是元素的ID的。

上面的代码行工作正常在Internet Explorer 7和更高版本,但似乎并没有在Internet Explorer中工作6

这可能是什么可能的原因?

+5

的确切原因是,IE6是有史以来发明的最糟糕的浏览器。 –

+0

您是否试图在添加后修改克隆对象的ID? – WhiskeyTangoFoxtrot

+3

@Kolink我想向您介绍Netscape 4.或者,我的亲爱的朋友HotJava。 – Pointy

回答

0

我在IE6上使用了clone(),所以不应该是这个问题。
也许你是无效的HTML和IE6,这是不容许比IE7宽容这一点。
你能告诉我们你的代码和jQuery的版本吗?

+0

我使用Jquery版本1.6.4 –

0

这很有趣,你应该问这个,因为我有一个非常类似的问题(虽然它影响IE7和可能IE6)。

此外,不知道你是否做了一些特殊的事情(即定义变量),但也许你应该将对象引用为$('#userListJId')而不是仅仅是元素名称。再一次,我看不到剩下的代码,所以你可能已经在文档范围之外定义了这些变量。

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

解决方法是不克隆对象,至少通过.clone(),而是将希望克隆的对象的外部HTML作为字符串并对id属性执行regex .replace() ,然后将修改后的HTML附加到tempOwnJString中。

IE中的另一个gotchya有时(通常是?),它在解析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并没有真正提供反正)这是最好的猜测。

+0

我现在看到为什么@FoxTrot包含设置ID的正则表达式。检查我的答案的评论为一个jsfiddle显示这是不必要的 - IE6处理ID正常的属性设置器更改就好了。 –

0

回应@Foxtrot说过的话,你需要确保你在克隆的元素上设置了id,否则你会发狂。毕竟,所有浏览器都遵循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 
+0

是的,但正如我所说,至少在我的经验中,IE7,因此,可能IE6,不允许你改变它的设置后的id属性,因此你必须对HTML进行hacky-regex-replace字符串被添加到/添加到DOM之前。 IE浏览器对于DOM来说是非常反复无常的,随着历史回溯到早期版本,它会变得更糟。 – WhiskeyTangoFoxtrot

+0

这是不正确的。启动IE6并试试这个jsfiddle。 http://jsfiddle.net/yHjvz/节点被复制,ID被设置,并且节点被追加。 IE6处理它一切都很好。 –

+0

也许我的情况是一个IE7问题。我所知道的是我的克隆机制在IE7上失败,当我插入debug alert()时,我注意到克隆对象的ID。使用attr('id',[newid])没有改变。只要我使用我的上述正则表达式解决方法,它就很好。 我在你的JSfiddle中看到你不使用jQuery,而是直接修改对象。这也可能是我的问题。无论哪种方式,它为我做了我所做的事情,并且我对Wasim问题的原始解释表明他的问题与我的问题类似,所以我分享了解决方法代码。 – WhiskeyTangoFoxtrot

相关问题