Javascript选择器引擎和内置函数

时间:2012-04-27 15:11:11

标签: javascript css-selectors

我找到了关于创建选择器引擎的以下教程.. http://blog.insicdesigns.com/2010/04/creating-your-own-selector-engine/

在javascript中我们有像

这样的功能
  • getElementById()
  • getElementsByTageName()
  • getElementsByName()

等,.....但是对于相同的功能,在他们的选择器引擎中,他们正在进行像

这样的检查
 this.nodes[i].tagName == nm.toUpperCase() 

而不是getElementsByTagName。这种方法有什么优势?...

使用

分配所有节点到vairiable的用法是什么?
 e.getElementsByTagName('*');

3 个答案:

答案 0 :(得分:1)

this.nodes[i].tagName == nm.toUpperCase()是按标记名称过滤节点列表的方法的一部分....所以与“按标记名称获取元素”无关

最后一点不是一个真正的问题..你想知道“为什么要选择所有节点”的原因?那你正在写一个扇区引擎......

答案 1 :(得分:1)

以下一行

this.nodes[i].tagName == nm.toUpperCase() 

在函数ofTag内。它正在过滤一组节点,寻找具有给定名称的节点。

下一行

e.getElementsByTagName('*');

检索节点下的所有子/后代,以便稍后可以像下面的

一样对其进行过滤
new DOMNodes(Selector.getAll(document)).ofTag('p').hasClass('note');  

答案 2 :(得分:1)

获得元素的tagName属性时

There is an inconsistency。有些浏览器返回大写,其他浏览器返回小写。要规范化值的输出,必须先执行其中一个操作,然后再继续操作。

至于e.getElementsByTagName('*');i recently answered a question,其中OP想要查找包含属性 name 且包含前缀mce_的所有元素。获取这些元素的唯一方法是获取DOM中的所有元素,并检查它们的属性名称。

这个getElementsByTagName('*')也有很好的应用,它决定了一个元素的直接子元素。例如,在一个非常深的DOM中。如果我要根据属性找到某些父元素并获取它的子元素,通常你会从body向下进行递归搜索以找到父元素。这将需要大量的递归操作。之后,你决定他们的孩子。

另一种方法是获取所有标记,确定其父节点,如果它们具有属性的父节点,则它们是直接子节点。此方法不需要递归,只需要getElementsByTagName('*')和循环返回的nodeList