如何在没有子节点的contenteditable div中选择文本范围?

时间:2015-11-11 19:45:36

标签: javascript html

我想在内容可编辑div中选择文字。我想提供一个起始索引和一个结束索引。

例如,如果我有一个div:

class bar
{
public:
    enum class foo { a, b };
    foo foo() const { return m_foo; }
    void set_foo(enum foo new_foo) { m_foo = new_foo; }
private:
    enum foo m_foo;
};

我喜欢做类似" selectText('#main',6,10)"它会选择将焦点设置为main并选择" World"。

但是我在网上看到的所有例子都假设容器div有子节点。但是我没有孩子。只是div中的文字。

这是我到目前为止所做的尝试无济于事:

<div id="main" contenteditable="true">
    Hello World
</div>

但我明白了: 未捕获的IndexSizeError:无法执行&#39; setStart&#39;在&#39;范围&#39;:偏移6处没有孩子。

我的jsfiddle: http://jsfiddle.net/foreyez/h4bL5u4g/

1 个答案:

答案 0 :(得分:2)

  

但是我没有孩子。只是div中的文字。

div 中的文字是一个孩子 - 它是一个文本节点。那就是你想要的目标。

您还需要修剪其ArrayList<Tile> Tile = new ArrayList<Tile>(); 以获得正确的偏移量。否则,将包括前导空格。

这似乎可以做你想要的:

&#13;
&#13;
ArrayList<Tile> tile = new ArrayList<Tile>();
&#13;
from tkinter import *
root = Tk()

colors = ('blue', 'green', 'orange', 'red', 'yellow', 'white', 'blue')
cd = dict(zip(colors, colors[1:]))
#print(cd)

def changeColour(button):
    button['bg'] = cd[button['bg']]

LT = Button(root, width=16, height=8, bg = 'white',
            command=lambda: changeColour(LT))
LT.place(x=10, y=10)

LM = Button(root, width=16, height=8, bg = 'white',
            command=lambda: changeColour(LM))
LM.place(x=10, y=150)

LB = Button(root, width=16, height=8, bg = 'white',
            command=lambda: changeColour(LB))
LB.place(x=10, y=290)

root.mainloop()
&#13;
&#13;
&#13;