0

我是个JavaScript的纯开发者,我设计我自己的框架时,我过我的选择模块,我发现了一个非常大的问题,它是性能如何创建一个高性能的选择器[无jQuery,请]

在选择模块我不

做一个非常复杂的选择器像jquery我做一个简单的 我的重要原因在这里,当我运行我的选择器在某些情况下,我必须获取页面正文上的所有元素,并且必须遍历它们以获取特定种类例如TD元素等元素,请注意>>>>不要告诉我在我的选择器中使用getElementsByTagName('TD')原因,我可以让开发人员选择多于1个标记名称,如

getElementsByTagNames('td,tr') 

所以在这种情况下,我必须让所有的,然后遍历和PIC只有需要的物品

我发现这种方式在另一方面jQuery的非常表现的食客有一个热闹的速度来选择项目不jQuery的do循环亦或是什么,所以我在这里的主要问题

如何使用JavaScript :)

感谢

+1

* *为什么你创建你自己的选择器引擎?你可以看一下[jQuery使用的Sizzle.js的未压缩源代码](https://github.com/jquery/sizzle/blob/master/sizzle.js),看看它们用于高性能。就个人而言,我不认为许多基于JavaScript的方法可以击败浏览器的本地实现,如querySelectorAll。 – DCoder 2012-07-08 15:04:37

+0

@DCoder因为我需要采取这种做法,使我自己的选择器引擎:) – Marwan 2012-07-08 15:06:46

+0

@Marwan在这种情况下,你应该开始研究一个实际的选择器引擎,而不是做无用的辅助函数:P – Esailija 2012-07-08 15:07:45

回答

3

,您仍然可以使用getElementsByTagName,如果你做这样的事情做一个高进行选择:现在

function getElementsByTagNames(elements) { 
    elements = elements.split(","); 
    var foundElements = []; 
    for(var i = 0, len = elements.length; i<len; i++) { 
     foundElements.push(document.getElementsByTagName(elements[i])); 
    } 
    return foundElements; 
} 

如果你打电话getElementsByTagNames("tr,div"),将返回一个包含所有trdiv元素的数组。

+1

它返回一个节点列表数组,这是非常不直观的。在99.99%的用例中,用户将不得不平坦化阵列。 – Esailija 2012-07-08 15:04:09

+1

加上它不保持原始节点顺序。 – DCoder 2012-07-08 15:06:00

+0

好点。我只是为OP提供了一个起点,但是,并没有给他写一个自定义选择器库。 :-) – 2012-07-08 15:08:59

7

不jQuery的做循环也还是什么

jQuery是足够聪明的使用现有的选择库(sizzle.js)。

Sizzle is smart enough让浏览器做这项工作。 document.querySelectorAll有窍门。

编辑:实际上,sizzle.js曾经是jQuery的固有组成部分,但它是一个独立的项目现在

+0

+1非常感谢我不知道有一个document.querySelectorAll我会搜索:) – Marwan 2012-07-08 15:09:49

相关问题