gpt4 book ai didi

javascript - GWT 在内容可编辑的 div 上设置插入符号位置

转载 作者:行者123 更新时间:2023-11-30 17:48:21 25 4
gpt4 key购买 nike

我正在编写一个基于网络的代码编辑器,其中每一行都是一个内容可编辑的 div。我写了一个 native 方法来设置给定索引上的插入符号位置,但它仅适用于 chrome。 opera 和 firefox 总是在行首设置插入符号。

public native void setCursorPos(int index) /*-{
//console.log(index);
var that = this.@edu.pg.client.CodeLine::getElement()();
var position = index;
var el = that;
var treeWalker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT,
function(el) {
return NodeFilter.FILTER_ACCEPT;
}, false);

while (treeWalker.nextNode()) {
if (position - treeWalker.currentNode.length <= 0) {
var range = document.createRange();
var sel = window.getSelection();
console.log(position);
range.setStart(treeWalker.currentNode, position);
range.setEnd(treeWalker.currentNode, position);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
el.focus();
return;
} else {
position = position - treeWalker.currentNode.length;
}
}

在测试代码时我使用了这个 http://jsbin.com/EcETajo/5/edit它适用于 chrome、ff 和 opera。

是函数错误还是 gwt 生成的代码中的某些内容改变了插入符号的位置?

编辑:我正在使用 treewalker,因为我希望将来通过在跨度节点中包装文本来处理文本高亮显示

EDIT2:好的,我自己发现了一个问题。

var range = document.createRange();var sel = window.getSelection();

那些台词是错误的。 gwt 中的 js 代码在 iframe 中,所以要访问我的 html 元素,我必须使用类似这样的东西 变量范围 = $doc.createRange(); var sel = $doc.getSelection();其中 $doc 是 gwt 设置的变量

最佳答案

在 gwt 本地方法中正确使用文档和窗口对象是通过使用 gwt 框架设置的 $wnd 和 $doc

关于javascript - GWT 在内容可编辑的 div 上设置插入符号位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com