IE中map元素的jquery name属性

dav*_*eps 6 jquery

以下jQuery在我的Firefox中运行良好,但在IE6中失败:

$("<map></map>").attr("name",somevar).appendTo("#someElement");
Run Code Online (Sandbox Code Playgroud)

问题是map元素永远不会获得我可以通过调用证明的name属性,alert($("#someElement").html());以及与之关联的图像没有其链接的事实

如果我使用它,它工作正常:

$("<map name='" + somevar + "'></map>").appendTo("#someElement");
Run Code Online (Sandbox Code Playgroud)

我很高兴使用第二行代码,但是想知道是否有其他人遇到过这个问题...或解释为什么它不起作用(我想知道它是特定于name属性的). ..

(第一和第二种情况的HTML输出):

IE6使用第一行:

<MAP><AREA shape=RECT coords=0,0,300,110 href="http://google.com"></MAP><IMG height=215 src="include/nav-images/main.png" width=591 useMap=#tehmap>
Run Code Online (Sandbox Code Playgroud)

IE6使用第二行:

<MAP name=tehmap><AREA shape=RECT coords=0,0,300,110 href="http://google.com"></MAP><IMG height=215 src="include/nav-images/main.png" width=591 useMap=#tehmap>
Run Code Online (Sandbox Code Playgroud)

Ian*_*nry 5

(这是更多的评论材料,但由于它已经很长时间,我别无选择,只能将其作为答案发布.希望它可能指向某人正确的方向.)

调查的一些结果,使用在IE 7模式下运行的IE 8(也表现出这个问题):

$('<map />').attr('x', 'abc').wrap('<div />').parent().html()
"<MAP x="abc"></MAP>"
Run Code Online (Sandbox Code Playgroud)

...它可以正确设置map标签的任何其他元素.可是等等...

>>$('<map />').attr('name', 'abc').attr('name')
"abc"
Run Code Online (Sandbox Code Playgroud)

所以它正在设定.但由于某些原因,返回的HTML将.html()其排除在外.为什么?实际对象是正确的,但它没有正确呈现标记.

更奇怪的是:

>>$('#dummy').append($('<map />').attr("name", "abc"))
>>$('#dummy').html()
"<MAP></MAP>"
Run Code Online (Sandbox Code Playgroud)

但是,如果我根据IE开发人员工具查看HTML,那就是......

<map submitName="abc"/>
Run Code Online (Sandbox Code Playgroud)

我对此进行了进一步研究,发现了这个问题:

在IE中由jQuery设置的iframe`name`属性的奇怪行为

并从接受的答案中得到相关的引用:

所以似乎正在发生的事情是,IE-up-to-7将所有名为name的属性重定向到一个不可见的属性,内部称为submitName,表单字段将更改字段将作为表单提交的一部分生成的数据,但它不会更改用于HTMLCollection索引,无线电分组,getElementsByName的实名属性,或者在[i]帧的情况下,更改目标.

这似乎是任何在name语义上使用该属性的元素的情况.例如:

>>$('#dummy').append($('<div />').attr("name", "abc"))
>>$('#dummy').append($('<input />').attr("name", "abc"))
>>$('#dummy').html()
"<DIV name="abc"></DIV><INPUT>"
Run Code Online (Sandbox Code Playgroud)

所以它似乎是一个相对普通的IE漏洞的奇怪表现,就像那样简单.因为你已经有了一个解决方法,我会说坚持下去 - 但幸运的是,其他人可以来并解释一下这个好一点.