为什么Sizzle选择器引擎会使用push.apply(结果......)
而不是results.push(...)
对我来说似乎没有必要。有人能解释一下动机吗?
为了详细说明,我对为更轻的重量选择器引擎编写/借用sizzy中的位很感兴趣。我想我不需要像:包含(文本)
这样的东西,这会进一步减轻重量。所以通读我看到的源代码
var arr = [],
push = arr.push
results = results || [];
....
push.apply( results, context.getElementsByTagName( selector ) );
这段代码很有意义,只是使用起来不是更简单吗
results.push( context.getElementsByTagName( selector ) );
我不想对这样一个小小的会议唠叨不休,我只想知道我是否遗漏了一些背景问题。
再次查看代码(Rest后)。在第205行,Sizzle检查选择器模式是否是ID并使用results.push
elem = context.getElementById( m );
results.push( elem );
return results;
第237行之后的代码用于元素或类,并使用了getElementsByTagName或getElementsByClassName以及push。应用(结果,…) 。
我想这是
for( elem in context.getElementsByClassName( m ) ) {
results.push( elem );
}
就像Mozzila文档示例中的情况一样https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
// short hand
var max = Math.max.apply(null, numbers);
var min = Math.min.apply(null, numbers);
/* vs. simple loop based algorithm */
max = -Infinity, min = +Infinity;
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] > max)
max = numbers[i];
if (numbers[i] < min)
min = numbers[i];
}
根据我最初的问题结果。push(context.getElementsByTagName(选择器)) 将导致不需要的对象。这会将NodeList类型的一个参数推送到结果中。
示例:
var a = [1, 2, 3], b = [], c =[];
b.push( a ); // b.length = 1, now we have a multidimensional array
[].push.apply( c, a ); // c.length = 3, we now have a clean array, not a NodeList
它代替了:
results.concat(array)
因为concat创建了一个额外的数组,但是push。应用不会:
push.apply(results, array)
缓存结果数组,不创建额外的数组。
但你也可以这样做:
results.push.apply(results, array)
我不知道为什么需要arr。
编辑:
我认为额外的arr可能需要将getElementsByTagName返回的伪数组转换为实数组。
jquery从1.3开始,使用了新的选择器–sizzle。效率超过了以前的jquery版本以及目前能见到的其他选择器。 Sizzle是jQuery作者John Resig新写的DOM选择器引擎,速度号称业界第一。而且有一个重要的特点就是Sizzle是完全独立于jQuery的,如果你不想用jQuery,可 以只用Sizzle。非常好用的,压缩后才3K多点。 看一个选择器性能对比图:
我看到了一些问题(用Sizzle替换dojo.query?)关于在dojo中使用Sizzle作为选择器引擎,并且知道这是可能的,但似乎找不到任何关于如何进行的教程或信息。 我知道在您的build.profile.js文件中,您可以选择这样的选择器引擎: 但是我该如何用嘶嘶声指向/替换“精简版”或“极致版”呢?
应用推广 PDF版下载 申请条件 应用有已发布并通过审核线上版本。 上架流程 服务商进入应用详情—应用市场上架—申请上架。 如流团队会在3个工作日内完成审核,审核结果会通过“企业管理助手”通知申请人。
我已经知道如何使用Sizzle CSS选择器引擎。 这是语法: 所以现在我的问题是:Sizzle CSS选择器引擎有什么用?
据我所知,Sizzle和querySelector/querySelector都是CSS选择器。所以加载Sizzle和执行以下操作有什么区别: 和 此外,我知道Sizzle返回一个元素数组,而querySelectorAll返回一个节点列表(在大多数浏览器中)。我还知道您需要加载Sizzle,并且可以使用文档。仅针对一个元素查询选择器。 那么,在性能上还有其他区别吗? 编辑:我的问题只是关于Siz
为什么在使用sizzle时出现以下代码调用错误: 选择符返回“[对象对象]:选中”。但是,当我简单地使用变量内容时,如也会小心地工作。 谢啦