我找到了关于创建选择器引擎的以下教程.. http://blog.insicdesigns.com/2010/04/creating-your-own-selector-engine/
在javascript中我们有像
这样的功能等,.....但是对于相同的功能,在他们的选择器引擎中,他们正在进行像
这样的检查 this.nodes[i].tagName == nm.toUpperCase()
而不是getElementsByTagName。这种方法有什么优势?...
使用
分配所有节点到vairiable的用法是什么? e.getElementsByTagName('*');
答案 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
。