function querySelector (selector, rootNode = document) {
let [first, rest] = splitSelectorStr(selector)
let nodes = findNodes(rootNode, first)
if (nodes.length > 0) {
if (rest.length === 0) {
return nodes[0]
}
for (let node of nodes) {
let res = querySelector(rest, node)
if (res) {
return res
}
}
}
return null
}
function findNodes (rootNode, selector) {
let head = selector.charAt(0)
let body = selector.slice(1)
switch (head) {
case '.':
return rootNode.getElementsByClassName(body)
case '#':
return [rootNode.getElementById(body)]
default:
return rootNode.getElementsByTagName(selector)
}
}
function splitSelectorStr (selector) {
let s = selector.trim()
let i = s.indexOf(' ')
let first, rest
if (i === -1) {
first = s
rest = ''
} else {
first = s.slice(0, i)
rest = s.slice(i + 1)
}
return [first, rest]
}
展开