Jquery 为什么人们在创建元素时使用斜杠?

Jquery 为什么人们在创建元素时使用斜杠?,jquery,Jquery,当人们使用jQuery创建元素时,我总是看到他们按照$()的思路做一些事情。为什么?据我所知,$(“”)也同样有效。我遗漏了什么吗?这是自动关闭标记的语法。不应该是自动关闭的,但在这种情况下,它没有什么区别。jQuery支持它,并且以相同的方式呈现它 $("<div>") // = <div></div> $("<div />") // = <div></div> $("<div></d

当人们使用jQuery创建元素时,我总是看到他们按照
$()
的思路做一些事情。为什么?据我所知,
$(“”)
也同样有效。我遗漏了什么吗?

这是自动关闭标记的语法。
不应该是自动关闭的,但在这种情况下,它没有什么区别。jQuery支持它,并且以相同的方式呈现它

$("<div>")       // = <div></div>
$("<div />")     // = <div></div>
$("<div></div>") // = <div></div>
$(“”)/
$("")     // = 
$("") // = 
有关更多详细信息,请参见此SO问题:

您可以使用
或简单地使用
。它们都是一样的。最后一个不那么冗长

以下是有关结束标记的一些文档:。见3.2.1

同样的事情也发生在我身上。见8.1.2.2


在Html中,您需要关闭标记。你有两种方法可以做到这一点。

不,你没有遗漏任何东西。jQuery将很乐意接受这一点并呈现适当的标记。我认为很多人都会被文档建议使用与XHTML兼容的元素所绊倒

然而,有些人似乎忽略了jQuery并没有将其直接传递给
document.createElement()
。相反,它在上面运行一个正则表达式(或者至少上次我检查时是这样),并计算出实际传递给
document.createElement()
的内容

这对我来说意味着,创建元素没有正确或错误的方法,因为实际上,您传递的是某个HTML元素的字符串表示形式。Resig先生本可以很容易地使用
$('div')
$('HTML:DIV')或者他当时想做的任何事情。相反,他选择使用“类似HTML的字符串,该字符串将被此正则表达式正确翻译为实际HTML”,因此,以下所有内容同样有效:

$('<div>');
$('<div/>');
$('<div></div>');
<代码>$(''); $(''); $('');

。。。和是有效的,不是因为它们可能兼容或不兼容XHTML,而是因为使用的正则表达式能够将其转换为正确的HTML元素。

它确保了跨浏览器的兼容性。如果容器元素未关闭
或未快速关闭
,某些浏览器可能会失败。非容器元素不需要它

有关详细信息,请参阅

校正

对于
,jQuery解析它并使用document.createElement。对于任何更复杂的内容,如
,它将使用innerHTML创建元素。在这种情况下,容器元素需要正确的标记关闭和嵌套,而非容器元素则是可选的。如果它们被排除在外,代码可能会在某些浏览器上失败

由于您可能会在某个时候向HTML字符串添加属性或子元素,因此最好始终使用标记关闭实践来避免意外错误。

这并不重要

jQuery(最终)应用以下正则表达式来确定传递的字符串是否为“单个标记”:

/^(?)$/
如果传递的字符串与此正则表达式匹配,jQuery只需获取子模式
(\w+)
(标记名),并将其传递到
document.createElement()


都与此模式匹配,因此它们的处理方式完全相同:作为
createElement('div')
,但不是“$('')”更不详细吗?是的,但如果这样做,HTML标记不会关闭。在html中,标记是用它的或关闭的。打开控制台并键入
$(“”)。追加(“”).html()
-它将输出
“”
好的,我知道自动关闭标记。我的问题是,无论你是否包含斜杠,它什么时候会有区别?据我所知,它没有区别。我认为jQuery只是以同样的方式解释它,以提供更多的灵活性。那么,从现在开始,除非有充分的理由,否则我们只使用最简单的版本-
$(“”)
-谁支持我?这是HTML,但我认为jQuery不是这样的,请看其他答案-它解析出要创建的元素。感谢George,我仔细阅读了,对于没有属性的简单元素,它确实使用了createElement。对于任何更复杂的内容,它都使用innerHTML,并需要适当的标记关闭。我已经更新了我的答案。这完全导致我在控制台中玩了几分钟,看看还有什么可以用。有趣的是,这意味着
也可以用,尽管完全不正确。需要注意的是,任何与此模式不匹配的HTML字符串都将通过
innerHTML
加载。这适用于
。在这种情况下,需要对容器元素进行适当的标记关闭
/^<(\w+)\s*\/?>(?:<\/\1>)?$/