Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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/1/angular/33.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
jQuery-每次都可以使用$(';#ElementId';)吗?_Jquery_Variables_Selector - Fatal编程技术网

jQuery-每次都可以使用$(';#ElementId';)吗?

jQuery-每次都可以使用$(';#ElementId';)吗?,jquery,variables,selector,Jquery,Variables,Selector,我刚刚学习了如何在jQuery中实现“document.getElementById”对应项(它更强大)。我的问题是,每次或每行代码都可以使用它吗?下面是我现在如何使用它: $('#MyParentElement').html('<tr id="' + $('#MyElement').val() + '"><td>' + $('#MyElement').val() + '</td></tr>'; $('MyParentElement').html

我刚刚学习了如何在jQuery中实现“document.getElementById”对应项(它更强大)。我的问题是,每次或每行代码都可以使用它吗?下面是我现在如何使用它:

$('#MyParentElement').html('<tr id="' + $('#MyElement').val() + '"><td>' + $('#MyElement').val() + '</td></tr>';
$('MyParentElement').html('+$('MyElement').val()+'';
如果我使用变量来引用对象,不是更好吗

var x = $('#MyElement');
$('#MyParentElement').html('<tr id="' + x.text() + '"><td>' + x.text() + '</td></tr>';
var x=$('#MyElement');
$('#MyParentElement').html(''+x.text()+'';

请注意,我更关心的是性能,而不是代码的清洁度。

考虑到第二个代码只查询DOM一次
x
,是的,存储jQuery对象是一个更好的主意。

为什么不呢

var x = $('#MyElement').text();
$('#MyParentElement').html('<tr id="' + x + '"><td>' + x + '</td></tr>';
var x=$('#MyElement').text();
$('#MyParentElement').html(''+x+'';

DOM选择非常昂贵。请缓存它

var x = $('#MyElement');

.在Mac OS X上的Chrome 13中,变量引用速度快1000倍以上


当然,这不仅是由于DOM的选择,还因为jQuery对象的构造。

存储$(“#MyParentElement”)在一个变量中会更快,但是会有一小部分,因为元素ID的选择速度很快。虽然如果构建一个大的JS应用程序,那么它可以加起来。

这和调用
文档差不多。getElementById
每次都可以


从技术上讲,最好使用第二个选项,并在重复访问时将结果存储到变量中。但实际上,除非对同一元素有数百个引用,否则用户不会注意到差异。

从性能和编码风格上看,是会更好


如果我错了,有人会纠正我,但我的理解是,如果使用第二个选项(即var x=$(“#myElement”),它将不会动态更新。如果#myElement发生更改,就像元素有时所做的那样,当您将其值赋给x时,您仍然会引用它是什么


如果您不想#myElement将要更改,请继续使用var x选项。正如其他人所说,这会更快一些。

谢谢!您真的帮了我的忙!:)但是,您应该对此进行限定。在引用同一元素数千次的合成基准中,变量引用速度要快1000倍。在实际代码中,您永远不会做这样的事情,实际的性能优势将更接近
r-1
倍,其中
r
是对元素的引用数量在用户体验方面,除非你做了数百个对元素的连续引用,否则这两种方法之间可能没有明显的区别。“我想考虑我的每一行代码,使Web更快。”好吧,那又怎样?好的编码实践就是好的编码实践。两者之间仍然存在巨大的性能差异。这并不奇怪。据我所知,没有令人信服的理由不使用优化的代码。仅仅因为在特定的实例中,采用不必要地重复DOM选择的实践是愚蠢的用户可能没有注意到差异。@domanokz:这很好。最后,所有这些都加起来了。如果你保持编写性能代码的心态,在某一点上会产生明显的差异。简短回答,是的。因为$()实际上是一个函数调用,与JavaScript一般一样,如果您看到自己多次使用相同的参数调用相同的函数,只需将其存储在一个变量中即可。我的观点是,选择对象超时还是创建引用变量更好。无论如何,感谢您指出这一点!只有在需要时,我才会使用您的代码元素的值…再次感谢!是的,但要回答您的问题-而不是调用x.text()2次,它只需调用一次。当然更好。是的,我确信元素不会更改。谢谢回答!我不是克隆对象,我是创建变量作为引用。我不是克隆对象,我是创建变量作为引用。