在jQuery中,这之间有什么区别:
$('<div>').appendTo('body');
和这个:
$('<div />').appendTo('body');
我一直认为它是“自我关闭”的方式,但我遇到了在某些生产代码中使用的第一种方式而没有错误。这是否有可能导致问题发生,或者这是一种可以接受的做法?
在jQuery中,这之间有什么区别:
$('<div>').appendTo('body');
和这个:
$('<div />').appendTo('body');
我一直认为它是“自我关闭”的方式,但我遇到了在某些生产代码中使用的第一种方式而没有错误。这是否有可能导致问题发生,或者这是一种可以接受的做法?
文档说:
当参数有单个标签时,例如 $('<img />') 或 $('<a></a>'),jQuery 使用原生 JavaScript createElement() 函数创建元素。
它还说:
不能包含元素的标签可以快速关闭也可以不快速关闭
因此,该表格$('<div>')
显然也有效,但没有记录。从文档中可以清楚地看出,其意图是需要关闭标签的标签应该具有该关闭标签,或者是自关闭的。
我会坚持使用记录在案的版本,因为它不太可能成为未来版本中重大更改的受害者。
<rant>
jQuery 库有将尽可能多的内容放在单个函数调用中的习惯(请参阅最近on
添加的示例),因此当您使用非自闭标签...
</rant>
不,这$("<div>")
和这$("<div />")
都不会引起问题。
证明是这样的,如果我们去jQuery 源代码,我们可以看到,在选择器具有单标签语法的情况下,<...>
它会使用以下正则表达式解析选择器:
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/
其中仅使用符号部分,createElement
并且结束斜杠可以是可选的。
只要后面没有任何内容,该语法就不会引起问题。
$("<div>") // Ok!
$("<div>foobar") // Not Ok!
$("<div><p>") // Not Ok!