使用jQuery创建新元素的正确或更好的方式是什么?
使用jQuery创建新元素的正确或更好的方式是什么?
关于问题https://stackoverflow.com/a/10619477/1076753,创建元素更好的方法是使用
$("", {id: "foo", class: "a"});
或者
$("", {id: "foo", class: "a"});
它们都可以工作,但哪种更好或更正确呢?
官方API文档指出,为了确保跨平台兼容性,代码片段必须是格式良好的。可以包含其他元素的标签应该与一个闭合标签配对:
$( "" );
而不能包含元素的标签可以快速关闭或不关闭:
$( "" ); $( "" );
所以,对于一个div元素来说,使用前两个选项中的一个是错误的。
从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这样的写法……
问题的出现原因是想要了解使用jQuery创建新元素的正确或更好的方法。解决方法是通过检查选择器是否为字符串,并且是否以<开头以及以>结尾。然后使用正则表达式匹配选择器是否为单个标签,如果是,则返回一个包含该标签的数组。最后,使用上下文对象设置属性。
通过检查选择器是否为字符串,并且是否以<开头以及以>结尾来创建新元素。如果选择器匹配单个标签,则返回一个包含该标签的数组。然后使用上下文对象设置属性。无论是使用第一种方法还是第二种方法,都可以创建div元素,只是在字节方面有所差异。这个差异在性能上没有实际影响。
总之,问题的解决方法是通过检查选择器的类型和内容来创建新元素,并使用上下文对象设置属性。无论选择哪种方法,都可以创建所需的元素。
问题的原因是关于使用jQuery创建新元素的正确或更好的方式。文章中提到了两种创建新元素的方法,分别是使用$("
$('<someElement>')
时,传递给它的内容会被解析并转换成一个真正的DOM元素,所以它不需要闭合标签。最后,问题中提到了加载时间的问题,使用多两个字符的方式加载所需的时间会稍微长一些,但是这个时间是微不足道的,并且这两个字符会被忽略掉,所以你不需要它们。作者建议进行性能测试,以确定哪种方式加载时间更长。