I am using contenteditable="true" to edit text in SVG. In all browsers except Safari it works.
Safari has an issue with caret position:

Sample code:
[contenteditable]{
-webkit-user-select:text;
user-select:text;
}
<div contenteditable="true" style="background: #ffe7e7">
<svg style="display:inline-block">
<text id="text" y="2em">Hello world</text>
</svg>
</div>