选择器唯数不多的几个能查找元素的方法,其他都是过滤元素。一个重要的需求就是从一组元素中获得tagName等于tag的子集,如过选择器如#id tag的形式,就要求过滤,但如果选择器是tag tag呢?那么为了效率,就要求每个元素进行tag.getElementsByTagName(tag)操作。
我早期的实现,利用uuid技术防止重复:
//获得经过标记的没有重复的tagName等于tag的元素集 var getElementsByTag = function (tag, lastResult) { for(var i=0,result = [],uniqResult = {} ,el; el = lastResult[ i++ ];){ var els = el.getElementsByTagName(tag); for(var j=0,elem; elem = els[ j++ ];){ elem.uuid = elem.uuid || "dom-"+uuid++ if(!uniqResult[elem.uuid]){ result[ result.length ] = uniqResult[elem.uuid] = elem; } } }; return result; }