jQuery源代码分析中循环技术的详细解决方案
从jQuery的源代码中学习到很多技巧。本文收集了jQuery中的各种遍历技术和场景,具体分析如下:简单(在事件中)
对于(在事件中键入){
}
缓存长度属性,避免每次查找长度属性,稍微遍历速度。
但如果 / /遍历htmlcollection,表现非常明显,因为每个属性访问htmlcollection,htmlcollection将内部匹配所有节点
对于(var j = 0,L = handlers.length;J < L;j++){
}
不要比较下标,直接判断元素是否为真(CAST)
var元素;
对于(var i = 0;elems {我};i++){
elem = elems {我};
/ /…
}
遍历动态数组(事件),在j实现之前不能缓存长度属性,j,因为数组下标数组元素不能遍历,所以不会造成一些错误。
为(J = 0;J < eventtype.length;j++){
eventtype.splice(J,1);
}
对于(var i = 1;i < results.length;i++){
如果(结果{ {结果} = i - 1 }){
results.splice(I,1);
}
}
在迭代过程中尽可能地减少遍历次数(事件),如果您能知道要在哪里遍历,这里是POS
为(J = POS | | 0;J < eventtype.length;j++){
}
反向遍历(事件),减少了几个字符:循环条件,结合我的还原和i值,会有反向遍历浏览器优化,遍历速度略有增加。
对于(var i = this.props.length,支柱;我;){
道具=道具{我};
事件{ } = { } originalevent道具道具;
}
反向遍历,中规中矩,反向有浏览器优化,稍有遍历速度。
为(J = tbody.length - 1;J > = 0;——j){
如果(jquery.nodename(TBODY { J),把)!TBODY { J },{子长度)。
TBODY { }(J。parentnode.removechild TBODY { j));
}
}
不要判断下标,直接确定元素(选择器)。
为(i = 0;checkset {我}!= NULL;i + +){
如果(checkset {我}(checkset { } { }我真的checkset。节点类型= 1 sizzle.contains = | |(上下文,checkset {我}))){
Results.push(集{我});
}
}
为(;;数组{ };i + +){
Ret.push(数组{我});
}
不要判断下标,去掉元素,然后确定元素(选择器)。
对于(var i = 0;(项目= curloop {我})!= NULL;i + +){
}
DOM元素遍历
(= parent.firstchild为节点;节点;节点为节点。nextSibling){
如果(node.nodetype = 1){
node.nodeindex = + +计数;
}
}
/ /动态DOM元素(DOM遍历),dir参数表示方向属性的元素,如parentNode,兄弟,PreviousSibling,lastchild和第一个孩子
用于((;;当前);){ { }
如果(cur.nodetype + Num = = = 1 = = =结果){
打破;
}
}
检查下标i
var i = promisemethods.length;
当(i){
obj { } } {我promisemethods =递延{ promisemethods {我} };
}
检查元素
当((类型=类型{ + })){
}
当遍历动态数组(ajax)时,总是得到第一个元素,检查这些值是否相等,如果它们是相等的和特殊的,从删除的数组开始,直到遇到不相等的元素或数组是空的。
而(数据类型= = = { 0 } { )
DataTypes.shift();
如果(CT =未定义的){
CT = s.mimetype | | jqxhr.getresponseheader(内容类型);
}
}
当遍历动态数组(异步队列)时,总是得到第一个元素,直到数组为空,或未定义元素的值时。
而(回调{ 0)){
Callbacks.shift(),应用(上下文,args);
}
而 / /电话regexp.exec(Ajax),屡调屡没有理由的执行比re.test和string.match更强大,每个电话将lastIndex属性的字符串匹配的下一个位置
而(((赛= rheaders.exec(responseheadersstring))){
responseheaders {比赛{ 1 }。toLowerCase(匹配{)} = 2; / /会在responseheaders在核心价值的反应形式
}
希望本文能帮助您设计jQuery的Web程序。