13

在jQuery中,这之间有什么区别:

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

和这个:

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

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

4

3 回答 3

12

文档说:

当参数有单个标签时,例如 $('<img />') 或 $('<a></a>'),jQuery 使用原生 JavaScript createElement() 函数创建元素。

它还说:

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

因此,该表格$('<div>')显然也有效,但没有记录。从文档中可以清楚地看出,其意图是需要关闭标签的标签应该具有该关闭标签,或者是自关闭的。

我会坚持使用记录在案的版本,因为它不太可能成为未来版本中重大更改的受害者。

<rant>
jQuery 库有将尽可能多的内容放在单个函数调用中的习惯(请参阅最近on添加的示例),因此当您使用非自闭标签...
</rant>

于 2012-05-25T15:55:21.850 回答
6

不,这$("<div>")和这$("<div />")都不会引起问题。

证明是这样的,如果我们去jQuery 源代码,我们可以看到,在选择器具有单标签语法的情况下,<...>它会使用以下正则表达式解析选择器:

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

其中仅使用符号部分,createElement并且结束斜杠可以是可选的。

于 2012-05-25T15:56:27.467 回答
4

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

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

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

于 2012-05-25T15:47:48.673 回答