使用开始标记与自闭标签创建空元素

时间:2012-05-25 15:46:20

标签: jquery

在jQuery中,这是否有任何区别:

$('<div>').appendTo('body');

而且:

$('<div />').appendTo('body');

我一直认为它是“自我关闭”的方式,但我遇到了第一种方法,在一些生产代码中使用没有错误。这有可能导致问题,或者这是一种可以接受的做法吗?

3 个答案:

答案 0 :(得分:12)

documentation说:

  

当参数具有单个标记时,例如$('&lt; img /&gt;')或   $('&lt; a&gt;&lt; / a&gt;'),jQuery使用原生JavaScript创建元素   createElement()函数。

它还说:

  

不能包含元素的标签可以快速关闭或不是

因此,$('<div>')形式显然也有效,但它没有记载。从文档中可以清楚地看出,意图是需要结束标记的标记应该具有该结束标记,或者是自闭合的。

我会坚持使用已记录的版本,因为这不太可能成为未来版本中突破性变化的受害者。

&LT;咆哮&GT;
jQuery库习惯于在单个函数调用中尽可能多地添加(参见最近的on添加示例),所以当你使用它时,它们会发明一些新东西。非自动关闭标签...
&LT; /咆哮&GT;

答案 1 :(得分:6)

没有。这个$("<div>")$("<div />")都不会导致问题。

证明是这样的,如果我们转到jQuery sources,我们可以看到,如果选择器具有单个标记语法<...>,它会使用此正则表达式解析选择器:

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

其中只有符号部分用于createElement,而结束斜线可以是可选的。

答案 2 :(得分:4)

只要没有任何内容,该语法就不会引起问题。

$("<div>") // Ok!
$("<div>foobar") // Not Ok!
$("<div><p>") // Not Ok!

供参考,请参阅http://api.jquery.com/jQuery/#jQuery2