Use element.isContentEditable. Preserve contenteditable undo stack.

**Use `element.isContentEditable`.**

`element.contentEditable` returns the string value of the `contenteditable` attribute, which is not a reliable indicator of the element’s editability. For example, the attribute values `inherit` and `plaintext-only` can indicate that an element is editable. This change uses the boolean `element.isContentEditable` property in place of `element.contentEditable`, which returns true when an element is editable and false when it is not, regardless of the `contenteditable` attribute value.

**Preserve `contenteditable` undo stack.**

Programatic DOM manipulations of `contenteditable` elements other than those made with `document.execCommand()` break the browser’s undo stack. For example, users are not be able to undo past the last jquery-textcomplete interaction because it is currently manipulating the DOM through `range.deleteContents()` and `range.insertNode()`. These changes replace range manipulations with `document.execCommand()` operations thus preserving the browser’s undo stack, including all jquery-textcomplete interactions.