Это для MS Internet Explorer, не тестировалось ни в одном другом браузере.
Как уже упоминалось в другом комментарии, до IE11 не поддерживается ForeignObject.
Вместо этого используйте атрибут contentEditable.
Простой SVG пример
<svg width="100" height="100" >
<g transform="translate(40,40)">
<text contentEditable="true">foo</text>
</g>
</svg>
Пример D3.js с привязкой данных
Здесь мы слушаем ключевые события, чтобы записать текст обратно в данные.
selection.
.append("text")
.attr("contentEditable", true)
.text(function(d) { return d.text })
.on("keyup", function(d) { d.text = d3.select(this).text(); });
Примечание : если узлы генерируются динамически, как в случае с d3.js, вы должны использовать contentEditable
с заглавной буквы, как таковой (это заняло у меня некоторое время)!
Примечание : не вводите текст в текст с помощью pointer-events: None
, так как тогда вы не сможете больше взаимодействовать с текстом, независимо от настройки contentEditable.