UNPKG

polyfill-service

Version:
55 lines (41 loc) 1.35 kB
(function (global) { var head = document.getElementsByTagName('head')[0]; function getElementsByQuery(node, selector, one) { var generator = document.createElement(), id = 'qsa' + String(Math.random()).slice(3), style, elements; generator.innerHTML = 'x<style>' + selector + '{qsa:' + id + ';}'; style = head.appendChild(generator.lastChild); elements = getElements(node, selector, one, id); head.removeChild(style); return one ? elements[0] : elements; } function getElements(node, selector, one, id) { var validNode = /1|9/.test(node.nodeType), childNodes = node.childNodes, elements = [], index = -1, childNode; if (validNode && node.currentStyle && node.currentStyle.qsa === id) { if (elements.push(node) && one) { return elements; } } while (childNode = childNodes[++index]) { elements = elements.concat(getElements(childNode, selector, one, id)); if (one && elements.length) { return elements; } } return elements; } Document.prototype.querySelector = Element.prototype.querySelector = function querySelectorAll(selector) { return getElementsByQuery(this, selector, true); }; Document.prototype.querySelectorAll = Element.prototype.querySelectorAll = function querySelectorAll(selector) { return getElementsByQuery(this, selector, false); }; })(this);