在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()
元素在某些点返回...随意取消注释并修补:)
对此的任何帮助将不胜感激:)
答案 0 :(得分:4)
我认为问题是您的div
标记位于dd
标记之外。它位于dl
标记中,可能only contain来自我收集的dt
或dd
。尝试将div
移至dd
标记。
具体来说,在我的链接中注意:
&lt;!ELEMENT DL - - ( DT | DD )+ - 定义列表 - &gt;
如果您被允许使用其他块级别或内联标签,则可能是这样的:
&lt;!ELEMENT DL - O(%flow; )* - 定义列表 - &gt;
注意flow选项意味着您可以在其中包含块或内联级别元素。不幸的是,这不是它的方式。 :(
至于你遇到问题的原因,浏览器可能正在尝试创建DOM,同时考虑到这一点并且必须添加新元素。这会导致JavaScript尝试遵循特定结构的问题,因为浏览器正在为结构创建自己的元素。