【问题标题】:jQuery adding self-closed DIV tag in IE8jQuery在IE8中添加自闭DIV标签
【发布时间】:2011-02-25 13:31:06
【问题描述】:

下面的代码根据表单上已有的数据设置了一个编辑界面,效果很好。除了根据this msdn article,任何自封闭的标签(例如:<div />)都没有innerhtml 属性。这使得我的个人 jscript 日历库阻塞了对正在创建的 div 的 innerHTML 分配。

fields.find("p[item][type='Calendar']").each(function() {
            index++;
            var currentText = $(this).html();
            $(this).html("<input id=\"calInput" + index + "\" type=\"text\" value=\"" + currentText + "\" /><div id=\"cal" + index + "\"></div>");
            myFactory.newCalendar("cal" + index, "calInput" + index);
        });

如何强制 jQuery 使用我在下面概述的 html 而不是创建自封闭 div?

编辑:从上面得到的html代码是:

<div id="cal2" style="" class="jcalStyle hide"/>

我需要它:

<div id="cal2" style="" class="jcalStyle hide"></div>

编辑 2:

Firefox 正在正确生成 HTML。我不知道为什么 IE8 会自动关闭(无效?) div。

【问题讨论】:

标签: javascript jquery internet-explorer-8 innerhtml


【解决方案1】:

这篇文章并不是说自闭标签没有innerHTML。这是说具有 empty 内容模型的标签(void elements,在规范中,如 img)没有它。

还要注意,在 HTML 中,div 不能写成 &lt;div/&gt; (reference)。它必须写成&lt;div&gt;&lt;/div&gt;。很多很多工具(例如 jQuery)让您可以快速轻松地使用规则,但别担心,jQuery 实际上并没有 添加 那个标签到您的页面标记(它是添加元素到 DOM,这完全是另一回事)。 &lt;element/&gt; 语法允许用于 void 元素(如 img)和外来元素(如 SVG 内容)。

【讨论】:

  • “innerHTML 属性对块元素和内联元素都有效。根据定义,没有开始和结束标记的元素不能有 innerHTML 属性。”我得到的错误(一个没有信息的通用错误)类似于尝试写入只读元素时收到的错误。
  • @C Bauer:是的。但是div 确实 有一个开始和结束标记。当他们说 "...既没有开始标签又没有结束标签的元素" 时,他们是在谈论元素是如何指定的,而不是你的写作方式它。我无法告诉您错误是什么,您还没有向我们展示您的newCalendar 代码。
  • @TJ - 是的,但是生成的代码没有结束标记,它是自闭的。请参阅上面的编辑。
  • @C Bauer:jQuery 对 DOM 的修改不会生成 HTML 代码。它们会导致 DOM 修改。您可能正在使用一种工具,该工具使用类似 HTML 的语法向您显示 DOM,但如果是这样,错误就在向您显示的工具中。同样,即使div (无效)写成&lt;div/&gt;,它也将有一个innerHTML 属性。
  • @TJ - 好吧,我正在使用 IE8 开发人员工具。我猜另一件不信任微软的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2017-02-21
  • 2011-01-21
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多