代码之家  ›  专栏  ›  技术社区  ›  davidsleeps

IE中map元素的jquery name属性

  •  6
  • davidsleeps  · 技术社区  · 15 年前

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

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

    问题是map元素从未得到生成的name属性,我可以通过调用 alert($("#someElement").html()); 它所关联的图像没有链接

    如果我用这个来代替,它会很好地工作:

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

    我很乐意使用第二行代码,但我想知道是否还有其他人有这个问题……或者解释一下为什么它不起作用(我想知道它是特定于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>
    

    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 回复  |  直到 15 年前
        1
  •  5
  •   Community Mohan Dere    8 年前

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

    使用IE8在IE7模式下运行的调查得出的一些结果(也显示了这个问题):

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

    …它可以正确设置 map 标签。但是等等…

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

    所以一切都准备好了。但是出于某种原因 .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-7重定向了所有 名为的属性 其他不可见财产, 内部称为submitname,用于 表单域更改数据字段 将作为表单的一部分生成 提交,但不会改变 用于 HTMLCollection索引, 无线分组、GetElementsByName或, 在[i]帧的情况下,目标。

    对于任何使用 name 语义上的属性。例如:

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

    因此,这似乎是一个相对常见的IE bug的奇怪表现,就这么简单。既然你已经有了一个解决办法,我会说坚持下去——但幸运的是,有人能过来解释一下。

        2
  •  0
  •   lucifurious    15 年前

    IE的DOM插入有问题。如果使用此格式:

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

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