element.firstChild
这个方法可能取到的应该是TEXT_NODE。
var util = {};util.first = function(element) { if (!element) return; var first = element.firstChild; // 处理 w3c 浏览器中第一个子元素是 TEXT_NODE // 并且需要考虑到有没有 COMMENT_NODE 的情况 while (first && first.nodeType !== 1) first = first.nextSibling; return first;} |
element.firstElementChild
util.first = function(element) { if(!element) return; // 刚好 IE8 以下支持直接拿 firstChild return element[element.firstElementChild ? "firstElementChild" : "firstChild"];} |
element.querySelector and element.getElementsByTagName
// 通过 HTML5 的 querySelector,及 getElementsByTagNameutil.first = function(element, tag) { if(!element) return; tag = tag || "*";; return element.querySelector ? element.querySelector(tag) : element.getElementsByTagName(tag)[0];} |
// IE6 支持的 childrenutil.first = function(element) { return element && element.children[0];} |