code: function ( self, range ) {
      try {
        if ( !range ) { range = self.getSelection(); }
        var node = range.startContainer,
            parent;
        // Climb the tree from the focus point while we are inside an empty
        // inline element
        if ( node.nodeType === TEXT_NODE ) {
          node = node.parentNode;
        }
        parent = node;
        while ( isInline( parent ) &&
                ( !parent.textContent || parent.textContent === ZWS ) ) {
          node = parent;
          parent = node.parentNode;
        }
        // If focused in empty inline element
        if ( node !== parent ) {
          // Move focus to just before empty inline(s)
          range.setStart( parent,
                          indexOf.call( parent.childNodes, node ) );
          range.collapse( true );
          // Remove empty inline(s)
          parent.removeChild( node );
          // Fix cursor in block
          if ( !isBlock( parent ) ) {
            parent = getPreviousBlock( parent, self._root );
          }
          fixCursor( parent, self._root );
          // Move cursor into text node
          moveRangeBoundariesDownTree( range );
        }
        // If you delete the last character in the sole <div> in Chrome,
        // it removes the div and replaces it with just a <br> inside the
        // root. Detach the <br>; the _ensureBottomLine call will insert a new
        // block.
        if ( node === self._root &&
             ( node = node.firstChild ) && node.nodeName === 'BR' ) {
          detach( node );
        }
        self._ensureBottomLine();
        self.setSelection( range );
        self._updatePath( range, true );
      } catch ( error ) {
        self.didError( error );
      }
    }
docs: If you delete the content inside a span with a font styling, Webkit will replace it with a <font> tag (!). If you delete all the text inside a link in Opera, it won't delete the link. Let's make things consistent. If you delete all text inside an inline tag, remove the inline tag.