Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery创建新元素的正确或更好的方法是什么?_Javascript_Jquery_Html_Frameworks_Tags - Fatal编程技术网

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

Javascript 使用jQuery创建新元素的正确或更好的方法是什么?,javascript,jquery,html,frameworks,tags,Javascript,Jquery,Html,Frameworks,Tags,与答案相关的一个元素最好使用 $("<div>", {id: "foo", class: "a"}); $(“”,{id:foo,class:a}); 或 $(“”,{id:foo,class:a}); 它们都有效,但使用哪个更好或更正确 这位官员表示,为了确保跨平台兼容性,代码片段必须格式良好。可以包含其他元素的标记应与结束标记配对: $( "<a href='http://jquery.com'></a>" ); $(“”); 而不能包含元素的标

与答案相关的一个元素最好使用

$("<div>", {id: "foo", class: "a"});
$(“”,{id:foo,class:a});

$(“”,{id:foo,class:a});
它们都有效,但使用哪个更好或更正确

这位官员表示,为了确保跨平台兼容性,代码片段必须格式良好。可以包含其他元素的标记应与结束标记配对:

$( "<a href='http://jquery.com'></a>" );
$(“”);
而不能包含元素的标记可以快速关闭,也可以不快速关闭:

$( "<img>" );
$( "<input>" );
$(“”);
$( "" );

因此,如果只使用易于测量的指标,那么在最后使用div的前两个选项中的一个是错误的:第一个更好,因为它短2字节

一旦你开始考虑可读性和其他不太明显的因素,这在很大程度上就成了一个意见的问题

那么,在最后使用div的前两个选项之一是错误的

不,该部分仅适用于jQuerys网站的“如果HTML比没有属性的单个标记更复杂”

它使HTML文档遍历和操作、事件处理、动画和Ajax等变得更加简单

注意,它没有提到HTML生成

JavaScript提供了该方法。如果将类似HTML的字符串作为选择器传递,jQuery将使用此方法

jQuery入口点(
$(WhateVerifeelikeDoingToday)
)类型检查选择器中的字符串、节点或函数,然后相应地处理请求。如果参数是字符串,那么它将通过+/-60行代码(我是HTML吗?我是选择器吗?我是ID吗?我是类吗?)。在识别出类似HTML的字符串后,它将被传递给另一个函数(附加函数调用)进行生成,因此速度较慢(请参见下面的基准测试)。事实上,它并没有给这个过程增加太多的价值,除了一致性,只是减慢了它的速度

我发现最好的实践是:不要将jQuery用于相当简单的任务(即节点创建)——只要有实践,就消除它所遇到的障碍

var div = document.createElement('div');
div.setAttribute("id", "foo");
div.setAttribute("class", "a");
div = $(div);
请注意,这方面的性能显著提高。(在Chrome中大约快4倍)。此解决方案比上述两种解决方案更快,而且具有内在的灵活性


我不认为字节数越少,执行时间越快的论点就在这个线程的范围内。然而,假设您正在缩小代码,我将抛出一个实际的例子,通过数组循环为表生成html行。字节不是问题,您只需要加载一次脚本-执行会让您陷入困境。

在您的情况下,更好或正确地使用它取决于此代码在页面中出现的频率@昆廷是正确的,因为第一个选项和第二个选项之间只有两个字节的差异。现在,如果代码在整个页面中只出现几次,那么现实地说,除非您在服务器上记录了大量流量,否则您将看不到两者之间的显著差异,另一方面,如果您正在运行一个中流量到高流量的站点,或者将有大量javascript实例出现在您的页面上,那么最好的选择是使用选项1,因为它比选项1小两个字节,并且在一个较大的页面上,有许多此代码实例,您将发现在页面的字节大小方面可以节省大量的资源页面

至于用于跨平台兼容性的格式良好的标记,第一个和第二个选项将在浏览器中产生完全相同的最终结果,因此在您的用例中,两个选项都不会影响兼容性


基于以上几点,我建议使用选项一,因为它提供了比选项二更大的双字节优势,这实际上是在您的用例中两个选项之间的唯一区别。

查看jQuery库,下面是中的相关部分

init=jQuery.fn.init=function(选择器、上下文、根){
var匹配,elem;
//句柄:$(“”),$(null),$(未定义),$(false)
如果(!选择器){
归还这个;
}
//方法init()接受另一个rootjQuery
//因此,migrate可以支持jQuery.sub(gh-2101)
root=root | | rootjQuery;
//处理HTML字符串
如果(选择器的类型==“字符串”){
如果(选择器[0]==“”&&
选择器长度>=3){
//假设以开头和结尾的字符串是HTML,并跳过正则表达式检查
匹配=[null,选择器,null];
}否则{
match=rquickExpr.exec(选择器);
}
//匹配html或确保没有为#id指定上下文
if(匹配&(匹配[1]| |!上下文)){
//句柄:$(html)->$(数组)
if(匹配[1]){
context=jQuery的context实例?context[0]:context;
//对于back compat,运行脚本的选项为true
//如果parseHTML不存在,故意让错误抛出
merge(这个,jQuery.parseHTML(
匹配[1],
context&&context.nodeType?context.ownerDocument | | context:document,
真的
));
//句柄:$(html,道具)
if(rsingleTag.test(match[1])&&jQuery.isPlainObject(context)){
for(上下文匹配){
//如果可能,将上下文的属性作为方法调用
if(jQuery.isFunction(此[匹配]){
此[匹配](上下文[匹配];
//…并以其他方式设置为属性
}否则{
this.attr(match,context[match]);
}
}
}
归还这个;
您将看到它检查选择器是否为
字符串
,如果是,则会看到它是否以
开头,以code>结尾

它既匹配
又匹配
,将
div
返回为
组[1]
var div = document.createElement('div');
div.setAttribute("id", "foo");
div.setAttribute("class", "a");
div = $(div);
if (typeof selector === "string") {
  if (selector[0] === "<" &&
    selector[selector.length - 1] === ">" &&
    selector.length >= 3) {
var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
jQuery.parseHTML = function( data, context, keepScripts ) {

    ...

    var parsed = rsingleTag.exec( data );

    // Single tag
    if ( parsed ) {
        return [ context.createElement( parsed[ 1 ] ) ];
    }
// HANDLE: $(html, props)
if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {