IE中map元素的jquery name属性

时间:2010-09-30 01:02:33

标签: jquery

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

$("<map></map>").attr("name",somevar).appendTo("#someElement");

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

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

$("<map name='" + somevar + "'></map>").appendTo("#someElement");

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

(第一和第二种情况下的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>

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>

2 个答案:

答案 0 :(得分:5)

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

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

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

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

>>$('<map />').attr('name', 'abc').attr('name')
"abc"

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

更奇怪的是:

>>$('#dummy').append($('<map />').attr("name", "abc"))
>>$('#dummy').html()
"<MAP></MAP>"

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

<map submitName="abc"/>

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

Weird behaviour of iframe `name` attribute set by jQuery in IE

接受答案的相关引用:

  

所以似乎正在发生的事情是   IE-up-to-7重定向全部使用   名为name的属性   否则 - 看不见的财产,   内部称为submitName,用于   表单字段更改字段中的数据   将生成作为表单的一部分   提交,但不会改变   用于的实名属性   HTMLCollection索引,   radio-grouping,getElementsByName,或   在[i]帧的情况下,定位。

对于在语义上使用name属性的任何元素,似乎都是这种情况。例如:

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

因此,它似乎是一个相对普通的IE漏洞的奇怪表现,就像那样简单。由于你已经有了一个解决方法,我会说坚持下去 - 但运气好的话,别人可以来这里解释一下这个问题。

答案 1 :(得分:0)

IE存在DOM插入问题。如果您使用以下格式:

$('#someElement).appendTo("<map></map>").attr("name",somevar);

我想你可能会有更好的运气。