【发布时间】:2012-05-11 06:25:00
【问题描述】:
这两种方法中哪一种是正确的:
$('<div>')
或
$('<div />')
它们似乎都有效。是一种方法比另一种方法更正确,还是它们都总是有效?
【问题讨论】:
-
无论如何我都会选择正确的 html。
-
我同意。当我看到第二个时,我总是觉得它不对。
标签: javascript jquery
这两种方法中哪一种是正确的:
$('<div>')
或
$('<div />')
它们似乎都有效。是一种方法比另一种方法更正确,还是它们都总是有效?
【问题讨论】:
标签: javascript jquery
它们在 jQuery 中产生相同的结果。
【讨论】:
<div>、<div/> 或<div></div>(可能有一些空白),无论元素类型如何,如果匹配,它使用document.createElement 生成元素。
来自docs:
如果一个字符串作为参数传递给 $(),jQuery 会检查 字符串以查看它是否看起来像 HTML(即,它在某处有
<tag ... >在字符串中)。如果不是,则字符串被解释为选择器 表达式,如上所述。但是如果字符串看起来是 HTML sn-p,jQuery 尝试按照描述创建新的 DOM 元素 通过 HTML。然后创建并返回一个引用的 jQuery 对象 对这些元素。您可以执行任何常用的 jQuery 方法 这个对象:
$('<p id="test">My <em>new</em> text</p>').appendTo('body');
如果 HTML 比没有属性的单个标签更复杂,因为它在 上面的例子,元素的实际创建是由 浏览器的innerHTML 机制。在大多数情况下,jQuery 会创建一个新的 元素并将元素的 innerHTML 属性设置为 传入的 HTML sn-p。当参数有单个标签时, 比如
$('<img />') or $('<a></a>'),jQuery使用创建元素 原生 JavaScript createElement() 函数。
为确保跨平台兼容性,sn-p 必须格式正确。可以包含其他元素的标签应与结束标签配对:
$('<a href="http://jquery.com"></a>');
另外,jQuery 允许类似 XML 的标记语法(斜杠前有或没有空格):
$('<a/>');
不能包含元素的标签可以快速关闭也可以不:
$('<img />');
$('<input>');
【讨论】:
虽然看起来它们产生了相同的结果,但根据用途,它们可能不会产生相同的结果。例如:
当 jQuery 解析 $('<div> <p>') 时,<p> 标记将是<div> 标记的子,因此结果将是:<div> <p></p> </div>
当 jQuery 解析 $('<div/> <p/>') 时,<p/> 标签将是 <div/> 标签的 sibling,因此结果将是:<div></div> <p></p>
【讨论】:
两种变体都给你相同的结果,但是这个
$('<div />', {id:"myID",class:"mycssClass class2 clazzz",some-attribute: "value"});
比
更好,更易读$('<div id="myId" class="mycssClass class2 clazzz" some-attribute="value"></div>');
【讨论】: