在代码review的时候,遇到了个问题,请大神指导下
个人代码中有多处dom操作。
类似:
获取模块:$("#all")
多次获取a:$("#a")
多次获取b:$("#b")
老大给出两个建议:
多次使用的dom,保存
。
var aObj = $("#a");
对于a,b,c都在all中操作。要首先保存all,减少全局检索
var viewObj = $("#all");
var aObj = $("#a",viewObj)
两个建议理论上都木有问题,但是,第二种实现方式
var aObj = $("#a",viewObj)
这个会在viewObj 内部检索吗?jquery 有相关资料吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
$() 这个方法完全体是这样的:
第二个参数可选, 它是selector的查找范围, 如果未指定, 可以理解为查找范围就是document
下面两个会查找到同样的dom集合:
这两个参数都可以接受字符串,dom元素,jquery对象作为参数。
相关资料可以直接看jqueryAPI,核心方法第一个就是。
http://www.css88.com/jqapi-1.9/jQuery/
jQuery( selector [, context ] )
用法的官方的说明:意思是会在指定的Context,也就是指定的DOM元素内查找;jquery内部使用find方法来实现
先说 结论 如果是仅仅是
id
选择器, 也就是楼主问的第一种效率高,因为第一种直接
document.getElementById
https://github.com/jquery/jquery/blob/master/src/core/init.js#L77
第二种 走的是
jQuery.find
jQuery.find = Sizzle
,https://github.com/jquery/jquery/blob/master/src/core/init.js#L90
https://github.com/jquery/jquery/blob/master/src/core/init.js#L95
https://github.com/jquery/jquery/blob/5943f1d7ffef41cc1a99bffe189f6d111fbccfd0/src/selector-sizzle.js#L6
jQuery
源码https://github.com/jquery/jquery/blob/master/src/core/init.js#L16
rquickExpr
只macth
单一id
选择器,或者html tag
Sizzle
https://github.com/jquery/jquery/blob/5943f1d7ffef41cc1a99bffe189f6d111fbccfd0/external/sizzle/dist/sizzle.js#L132
因为$()是个方法,是方法就会有执行时间
每次$()起来保存给变量使用