jQuery .html()函数仅在IE7中的<dl>中销毁代码</dl>

时间:2011-02-08 06:24:35

标签: jquery html internet-explorer-7

在SO上发表了几个答案,但这是我的第一个问题:)

背景知识......我正在使用jQuery的easyAccordian插件:http://www.madeincima.eu/samples/jquery/easyAccordion/。每张幻灯片(由<dd>制成)都具有动态内容。在一张特定的幻灯片上,我想在用户点击按钮时换出<dd>的全部内容......

代码如下(或者您可以访问jsFiddle):

HTML:

<dl>
<dt class="click">Slide heading</dt>
<dd class="specs"></dd>

<div style="display:none;">
    <div id="defaultSpecs">
        <div style="width:80%;margin-left:10%;text-align:center;margin-top:60px;">
            wrsyik5s7khgjsdghf      
        </div>
    </div>
</div>
</dl>

JS:

$("dt.click").click(defaultSpecs);

function defaultSpecs() {
    //alert($("#defaultSpecs").html());
    var defSpec  =  $("#defaultSpecs").html();
    //alert($("#defaultSpecs").html());
    $("dd.specs").html(defSpec);
    //alert($("#defaultSpecs").html());
    alert($("body").html());
}

这在Firefox和其他版本的IE中很有魅力,但是当在IE7中使用时,它不会......

<dl>内和<dd>下方的Html似乎正在被破坏,然后(显然)该函数在第二次(或第三次)调用时失败...

我是否错过了<dl><dd>代码的重要方面?或者jQuery .html()函数有问题吗?

值得注意的一些事情:

  • 有多个<dd><dt> 但是在原始代码中 如果没有它们,错误仍会复制。

  • 我已将警报包含在内 可以看到各种.html() 元素在某些点返回...随意取消注释并修补:)

对此的任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:4)

我认为问题是您的div标记位于dd标记之外。它位于dl标记中,可能only contain来自我收集的dtdd。尝试将div移至dd标记。

具体来说,在我的链接中注意:

  

&lt;!ELEMENT DL - - ( DT | DD )+ - 定义列表 - &gt;

如果您被允许使用其他块级别或内联标签,则可能是这样的:

  

&lt;!ELEMENT DL - O(%flow; )* - 定义列表 - &gt;

注意flow选项意味着您可以在其中包含块或内联级别元素。不幸的是,这不是它的方式。 :(

至于你遇到问题的原因,浏览器可能正在尝试创建DOM,同时考虑到这一点并且必须添加新元素。这会导致JavaScript尝试遵循特定结构的问题,因为浏览器正在为结构创建自己的元素。