使用jQuery创建新元素的正确或更好的方式是什么?

18 浏览
0 Comments

使用jQuery创建新元素的正确或更好的方式是什么?

关于问题https://stackoverflow.com/a/10619477/1076753,创建元素更好的方法是使用

$("", {id: "foo", class: "a"});

或者

$("", {id: "foo", class: "a"});

它们都可以工作,但哪种更好或更正确呢?

官方API文档指出,为了确保跨平台兼容性,代码片段必须是格式良好的。可以包含其他元素的标签应该与一个闭合标签配对:

$( "" );

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

$( "" );
$( "" );

所以,对于一个div元素来说,使用前两个选项中的一个是错误的。

0
0 Comments

从jQuery网站上可以看到,jQuery主要用于简化HTML文档遍历和操作、事件处理、动画和Ajax等操作,并没有提到HTML生成。

JavaScript提供了document.createElement方法用于创建元素节点。如果将类似HTML的字符串作为选择器传递给jQuery,则jQuery会利用这个方法。jQuery的入口点$(whatEverIFeelLikeDoingToday)会对选择器进行类型检查,判断是字符串、节点还是函数,并根据不同的情况处理请求。如果参数是字符串,代码会经过大约60行的处理(判断是否为HTML、选择器、ID或类)。在确定是HTML-like字符串后,代码会传递给另一个函数(调用了其他函数),进行生成操作,因此效率较低(下面的基准测试结果可见)。实际上,这个过程并没有增加太多价值,只是增加了额外的处理时间。

根据经验,我发现最好的做法是:对于比较简单的任务(比如节点创建),不要使用jQuery,尽量去除其中的障碍。

var div = document.createElement('div');

div.setAttribute("id", "foo");

div.setAttribute("class", "a");

div = $(div);

注意在这个基准测试中,这种方法的性能显著提高(在Chrome中快了将近4倍)。这种解决方案比前面两种更快,并且天然支持跨平台。

我认为,在这个讨论的范围内,比起代码的长度和执行时间之间的权衡,我更注重执行时间。假设你在代码中进行了缩小,我将举一个实际的例子,循环遍历数组为表格生成HTML行。字节并不是问题,你只需要加载脚本一次,执行时间才是拖慢速度的原因。

我曾经和一些人一起工作,他们非常反对这样做:div = $(div)。通过赋值操作,你最终改变了"div"的类型。不过,我也不喜欢看到$varName这样的写法……

0
0 Comments

问题的出现原因是想要了解使用jQuery创建新元素的正确或更好的方法。解决方法是通过检查选择器是否为字符串,并且是否以<开头以及以>结尾。然后使用正则表达式匹配选择器是否为单个标签,如果是,则返回一个包含该标签的数组。最后,使用上下文对象设置属性。

通过检查选择器是否为字符串,并且是否以<开头以及以>结尾来创建新元素。如果选择器匹配单个标签,则返回一个包含该标签的数组。然后使用上下文对象设置属性。无论是使用第一种方法还是第二种方法,都可以创建div元素,只是在字节方面有所差异。这个差异在性能上没有实际影响。

总之,问题的解决方法是通过检查选择器的类型和内容来创建新元素,并使用上下文对象设置属性。无论选择哪种方法,都可以创建所需的元素。

0
0 Comments

问题的原因是关于使用jQuery创建新元素的正确或更好的方式。文章中提到了两种创建新元素的方法,分别是使用$("

")和$("

")。根据可测量的指标,第一种方式更好,因为它比第二种方式短2个字节。然而,当考虑可读性和其他不太明显的因素时,选择更多地取决于个人观点。如果HTML比一个没有属性的单个标签更复杂,那么前两种选项都不适用。至于xHtml,它在这些例子中是不相关的,因为浏览器在创建节点时会自动处理它。你只是告诉jQuery节点的结构、属性和属性将是什么。文章中还提到,使用空格或斜杠在尖括号之前对于jQuery来说并没有区别。最后,问题中提到了是否有必要区分

,回答是不需要,因为它们的含义是相同的。不管你使用哪种方式,你实际上都是在告诉jQuery创建一个DOM元素。文章中还提到了使用$('<someElement>')时,传递给它的内容会被解析并转换成一个真正的DOM元素,所以它不需要闭合标签。最后,问题中提到了加载时间的问题,使用多两个字符的方式加载所需的时间会稍微长一些,但是这个时间是微不足道的,并且这两个字符会被忽略掉,所以你不需要它们。作者建议进行性能测试,以确定哪种方式加载时间更长。

0