start() {
    const _input = document.querySelector(this.options.input);
    if (_input instanceof HTMLElement) {
      this.input = _input;
    } else {
      throw new Error(errors.noInput);
    }

    if (typeof this.options.find === 'string') {
      this.elements = document.querySelectorAll(this.options.find);
    } else {
      throw new Error(errors.findOption);
    }

    /**
     * Amount of elements to search
     * @member elementsLength
     * @type {Number}
     * @memberOf holmes
     */
    this.elementsLength = this.elements.length;

    /**
     * All of the elements that are searched as an array
     * @member elementsArray
     * @type {Array}
     * @memberOf holmes
     */
    this.elementsArray = Array.prototype.slice.call(this.elements);
    this.hidden = 0;

    // Create a container for a placeholder if needed
    if (typeof this.options.placeholder === 'string') {
      const holder: string = this.options.placeholder;
      this.placeholderNode = document.createElement('div');
      this.placeholderNode.id = 'holmes-placeholder';
      this._hideElement(this.placeholderNode);
      this.placeholderNode.innerHTML = holder;
      if (this.elements[0].parentNode instanceof Element) {
        this.elements[0].parentNode.appendChild(this.placeholderNode);
      } else {
        throw new Error(errors.impossiblePlaceholder);
      }
    }

    // If a visible class is given, give it to everything
    if (this.options.class.visible) {
      const vis: string = this.options.class.visible;
      this.elementsArray.forEach((element: HTMLElement) => {
        element.classList.add(vis);
      });
    }

    // Listen for input
    this.input.addEventListener('input', this.search);
  }
Start an event listener with the specified options
@function start
@throws {Error} If a there was no options.find
@throws {Error} If the placeholder couldn't be inserted
@throws {Error} If the .input isn't valid
@memberOf holmes