如何在将组件添加到内容可编辑后添加光标位置 div
How to add cursor position after adding a component to content-editable div
我通过单击按钮插入了组件。现在我想要我的子组件添加到父组件后的光标位置 div。我附上了一个沙盒 link,它包含我到目前为止完成的代码。
SANDBOX
代码:
var ComponentClass = Vue.extend(Child);
var instance = new ComponentClass();
instance.$mount(); // pass nothing
var editableDiv = this.$refs.editor;
var range = document.createRange();
var sel = window.getSelection();
range = sel.getRangeAt(0);
// check that we are in content editable div
if (sel.getRangeAt(0).endContainer.parentNode.id === "editor") {
range.insertNode(instance.$el);
range.setStartAfter(instance.$el);
sel.removeAllRanges();
sel.addRange(range);
editableDiv.focus();
这可能是 WebKit-specific 的问题,因为它在 Edge 或 firefox 中没有发生。
当页面加载时,单击其他任何地方,然后单击按钮,您将看到错误不会发生。
您可以在使用 getRangeAt 之前检查 rangeCount。
例如:
var sel = window.getSelection && window.getSelection();
if (sel && sel.rangeCount > 0) {// Your code here //}
祝你好运!
所以,问题是我已经将“display:flex”属性 应用到父 div,现在显示:“inline-block”帮助完成了。现在只需将焦点应用到主要 div,我在添加组件后得到光标位置。
我通过单击按钮插入了组件。现在我想要我的子组件添加到父组件后的光标位置 div。我附上了一个沙盒 link,它包含我到目前为止完成的代码。 SANDBOX
代码:
var ComponentClass = Vue.extend(Child);
var instance = new ComponentClass();
instance.$mount(); // pass nothing
var editableDiv = this.$refs.editor;
var range = document.createRange();
var sel = window.getSelection();
range = sel.getRangeAt(0);
// check that we are in content editable div
if (sel.getRangeAt(0).endContainer.parentNode.id === "editor") {
range.insertNode(instance.$el);
range.setStartAfter(instance.$el);
sel.removeAllRanges();
sel.addRange(range);
editableDiv.focus();
这可能是 WebKit-specific 的问题,因为它在 Edge 或 firefox 中没有发生。 当页面加载时,单击其他任何地方,然后单击按钮,您将看到错误不会发生。 您可以在使用 getRangeAt 之前检查 rangeCount。 例如:
var sel = window.getSelection && window.getSelection();
if (sel && sel.rangeCount > 0) {// Your code here //}
祝你好运!
所以,问题是我已经将“display:flex”属性 应用到父 div,现在显示:“inline-block”帮助完成了。现在只需将焦点应用到主要 div,我在添加组件后得到光标位置。