index.js

var createSizzle = require("./sizzle");
exports.applyQuerySelector = function(doc, dom) {
  var addSizzle = function(document) {

    if (!document._sizzle) {
      document._sizzle = createSizzle(document);
    }
    return document._sizzle;
  };

  doc.querySelector = function(selector) {
    return addSizzle(this)(selector, this)[0];
  };

  doc.querySelectorAll = function(selector) {
    return new dom.NodeList(addSizzle(this)(selector, this));
  };

  var _createElement = doc.createElement;
  doc.createElement = function() {
      var element = _createElement.apply(this, arguments);

      element.querySelector = function(selector) {
        return addSizzle(this.ownerDocument)(selector, this)[0];
      };

      element.querySelectorAll = function(selector) {
        var el = this;
        if (!this.parentNode) {
          el = this.ownerDocument.createElement("div");
          el.appendChild(this);
        }
        return new dom.NodeList(addSizzle(this.ownerDocument)(selector, el.parentNode || el));
      };

      return element;
  };

};