【问题标题】:difference between $('<div>') and $('<div/>') [duplicate]$('<div>') 和 $('<div/>') 之间的区别 [重复]
【发布时间】:2012-11-30 11:08:34
【问题描述】:

可能重复:
$(‘<element>’) vs $(‘<element />’) in jQuery

我习惯写$('&lt;div&gt;')
但是今天我看到了 john-resig 关于高级 jquery 的介绍,他使用以下语法 $('&lt;div/&gt;')
http://loft.bocoup.com/john-resig-advanced-jquery/

对我来说,它们似乎产生了相同的输出。

我的问题是:两者之间有什么区别吗? $('&lt;div&gt;')$('&lt;div/&gt;')?

【问题讨论】:

  • 我认为第一个在旧 IE 中失败。
  • 为什么不只使用$('div')
  • @DJDavid98:那完全不同;它选择现有元素。

标签: javascript jquery html


【解决方案1】:

不,jQuery 会将这些语句标准化为完全相同的。


在 jQuery 的一些早期版本中,&lt;div&gt; 实际上&lt;div/&gt; 更快,无论出于何种原因。我还不知道,这是否仍然适用。

http://jsperf.com/jquery-constructor-performance

似乎这个 错误/功能 不再正确。

【讨论】:

    【解决方案2】:

    &lt;div&gt; 是一个开始标签。 &lt;div/&gt; 是一个自闭合标签。但是,在这种情况下,没有区别。

    【讨论】:

    • 自闭合标签在 HTML 中不存在。它们在 HTML 5 中被允许,以安抚那些不能让 XHTML 消亡但它们不会自我关闭的人。你不能在真正的 HTML 中说 &lt;div /&gt; 并让它像 XHTML 小伙伴们期望的那样工作——解析器会忽略斜线,并像对待 &lt;div&gt; 一样对待 &lt;div /&gt;
    • 好的,在重读the spec 后,我收回了。自闭合标签确实存在,但仅适用于“外来元素”(MathML/SVG)和 void 元素(无论如何都没有结束标签)。看来&lt;div /&gt; 实际上是无效的 HTML。
    【解决方案3】:

    &lt;div&gt;&lt;div/&gt;&lt;div&gt;&lt;/div&gt;,甚至&lt;div/&gt;&lt;/div&gt;(是的,这个只会创建一个元素)都触发了singleTag正则表达式,这使得jQuery调用document.createElement("div")。它根本没有传递给任何 html 解析器。

    这是你可以使用的正则表达式,如果它返回 true,它将是 document.createElement'd

    var rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
    

    【讨论】:

    • +1,不知道&lt;div/&gt;&lt;/div&gt;,但它显然匹配\/? 使自动关闭成为可选。
    猜你喜欢
    • 2021-10-31
    • 2013-05-30
    • 1970-01-01
    • 2017-01-07
    • 2018-10-29
    • 1970-01-01
    • 2016-09-28
    • 2011-12-07
    • 2012-07-06
    相关资源
    最近更新 更多