jQuery中$('<element>')vs $('<element />')

Gol*_*wby 30 jquery

我看到人们用两种不同的方式在jQuery中创建HTML元素:

$('<element>')
Run Code Online (Sandbox Code Playgroud)

$('<element />') 
Run Code Online (Sandbox Code Playgroud)

我很好奇哪一个"更正确".我看到第一个显而易见的优点是只是简单地输入.根本使用哪一个会有所不同吗?

Rob*_*b W 27

没有区别,如源代码第30 第121行所示:

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

/* Line 121 */
// If a single string is passed in and it's a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec( selector );
Run Code Online (Sandbox Code Playgroud)

以下是等效的:

  • <a></a>
  • <a />
  • <a>

  • 当我写这个问题时,我想我可以通过查看源代码来自行解决.感谢您直接在答案中引用代码. (4认同)

She*_*hea 6

技术上$('<element></element>')更正确,因为/在HTML5中删除了使用自闭关标签,但它完全没有区别,因为该语句由jQuery解析.如果有的话,只是使用$('<element>') 可能实际上稍微快一点,因为它更少的字符阅读.哪个应该跳过一些Regex条件.

更重要的是,如果你正在寻找最快可能使用jQuery方式:

var temp = new jQuery.fn.init();
temp[0] = document.createElement('element');
temp.length = 1;
Run Code Online (Sandbox Code Playgroud)

这个版本是最快的,因为它跳过jQuery()包装"new jQuery.fn.init()",并且不传递任何参数,以便它立即返回一个新的jQuery对象.它会跳过许多条件和自动防故障语句,如果您已经确切知道自己要做什么,那么这些语句是不必要的.

或略短:

var temp = $(document.createElement('element'));
Run Code Online (Sandbox Code Playgroud)

这个版本稍慢,但更容易阅读,更整洁.它仍然会跳过用于解析的大块代码,传递的字符串是什么.相反,jQuery可以自动知道我们在这里使用节点.

参考
HTML5不允许"自我关闭"标签
Google:html5自我关闭标签
jsperf