convertElement (el) {
    const schema = this._getSchema()
    if (!this.state.doc) this.reset()
    const isTopLevel = !this.state.isConverting
    if (isTopLevel) {
      this.state.isConverting = true
    }

    let nodeData, annos
    const converter = this._getConverterForElement(el)
    if (converter) {
      const NodeClass = schema.getNodeClass(converter.type)
      nodeData = this._createNodeData(el, converter.type)
      this.state.pushContext(el.tagName, converter)
      // Note: special treatment for property annotations and inline nodes
      // i.e. if someone calls `importer.convertElement(annoEl)`
      // usually, annotations are imported via `importer.annotatedText(..)`
      // The peculiarity here is that in such a case, it is not
      // not clear, which property the annotation should be attached to.
      if (NodeClass.isInlineNode()) {
        nodeData = this._convertInlineNode(el, nodeData, converter)
      } else if (NodeClass.isPropertyAnnotation()) {
        nodeData = this._convertPropertyAnnotation(el, nodeData)
      } else {
        nodeData = converter.import(el, nodeData, this) || nodeData
      }
      const context = this.state.popContext()
      annos = context.annos
    } else {
      throw new Error('No converter found for ' + el.tagName)
    }
    // create the node
    const node = this._createNode(nodeData)
    // and all annos which have been created during this call
    annos.forEach((a) => {
      this._createNode(a)
    })

    // HACK: to allow using an importer stand-alone
    // i.e. creating detached elements
    if (this.options['stand-alone'] && isTopLevel) {
      this.state.isConverting = false
      this.reset()
    }
    return node
  }
Converts a single HTML element and creates a node in the current document.

@param {DOMElement} el the HTML element
@returns {object} the created node as JSON