以下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>
答案 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);
我想你可能会有更好的运气。