javascript - 在光标位置插入文本在空行上失败

标签 javascript gwt

我在 GWT 中使用这个 native JavaScript 方法在 RichTextArea 的光标位置插入文本。它有时会起作用,但经常给我这个错误消息:“refNode.insertData 不是一个函数。每当光标位于空行上时似乎就会发生。

public native void insertText(String text, int pos) /*-{
    var elem = <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5f2b37362c711f3c30327138303038333a7138282b712a2c3a2d713c33363a312b712a36710a16103d353a3c2b" rel="noreferrer noopener nofollow">[email protected]</a>::getElement()();
    var refNode = elem.contentWindow.getSelection().getRangeAt(0).endContainer;
    refNode.insertData(pos, text);
}-*/;

所以我需要调试这个 JavaScript,但不知道从哪里开始。我对 javascript 知之甚少,只得到了我正在使用的这个方法 question 。我从另一个 native 方法获取光标位置,这是我从 question 复制的。 .

我读到此错误是因为 refNode 不是正确的对象类型。我想有人会知道它实际上是什么类型,并且可以帮助我处理这种情况。

最佳答案

我假设问题是 refNode 的类型不正确。一种可能的解决方案是检查 refNode 的类型,如果它不是 TEXT_NODE 类型,则创建一个文本节点并将其添加到 refData。代码看起来像这样:

public native void insertText(String text, int pos) /*-{
    var elem = <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="15617d7c663b55767a783b727a7a7279703b7262613b606670673b76797c707b613b607c3b405c5a777f707661" rel="noreferrer noopener nofollow">[email protected]</a>::getElement()();
    var refNode = elem.contentWindow.getSelection().getRangeAt(0).endContainer;
    if(refNode.nodeType == 3){
        var newTxtNode = document.createTextNode(text);
        refNode.appendChild(newTxtNode);
    } else {
        refNode.insertData(pos, text);
    }
}-*/;

可以找到节点类型here .

关于javascript - 在光标位置插入文本在空行上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17112095/

相关文章:

javascript - 为什么只有当我更改被调用函数语法时,我的异步函数才能正常工作?

javascript - 无法在 Javascript 中更改 img 的 src(无法设置 null 的属性 'src')

GWT : Celltable Multiselection , MouseDown 事件?

gwt - TOMCAT 上的 HTML 模式下没有图像

java - Gwt + Maven + Idea,项目编译器输出设置

Javascript:如何调整框架大小?

javascript - Discord 错误无法读取属性 'isFocused'

javascript - 下一行代码在 Promise 实际解析之前运行

java - 如何处理 SmartGWT 日历中特定事件上的鼠标右键单击?

javascript - 包括来自 GoogleMaps API 的多个 map ,无需回调