当前位置: 首页 > 知识库问答 >
问题:

如何在Javascript中获取整个div的范围偏移量?

张翰音
2023-03-14

我使用以下方法基于用户选择创建一个范围:

var selection = window.getSelection();
var beginsAt = selection.getRangeAt(0).startOffset;
var endsAt = selection.getRangeAt(0).endOffset;
return [beginsAt,endsAt];

调用此函数的组件执行以下操作:

let before = text.substring(0, range[0]);
let highlighted = text.substring(range[0], range[1]);
let after = text.substring(range[1], text.length);
return(
        <div>
            {before}
            <span style={{
                backgroundColor: 'yellow'
            }}>
                {highlighted}
            </span>
            {after}
        </div>
)

每当我选择文本时,范围总是相对于高亮显示的跨度结束的位置。因此,如果我的文本在0到50之间,我选择范围[25,26],然后选择范围[26,27],而不是突出显示范围[26,27],它突出显示范围[0,1],因为范围是[0,1]相对于{after}生成的文本。

只要我突出显示{之前}渲染的任何文本,我就没有问题,只有当我突出显示{之后}部分渲染的内容时。

如何使这些范围值相对于整个文本的根,而不是相对于它们呈现的块?这是反应的限制还是我的实现?

共有2个答案

芮念
2023-03-14

问题肯定是与实现,而不是javascript或反应的限制(至少在这里提出的问题的方式)。

与其尝试强制索引符合父容器,不如简单地根据以前的选择来抵消它们。

获取选定内容的方法可以修改为包含以下内容:

(relativityFlag) => {
    var selection = window.getSelection();
    var beginsAt = selection.getRangeAt(0).startOffset;
    var endsAt = selection.getRangeAt(0).endOffset;

    if(relativityFlag){
        beginsAt += endsAt;
        endsAt += endsAt;
    }
    return [beginsAt, endsAt]
}

其中,如果选择位于{after}渲染块内,则相对性标志为真。

这是使索引符合更大范围的许多不同方法之一,但也是最简单的实现方法。

何聪
2023-03-14

很可能会得到[0,1],因为这是当前节点中的偏移量。您需要的是父节点中节点集合内的偏移量。我认为这个答案符合你的需要:https://stackoverflow.com/a/26477716/4650008

 类似资料:
  • 问题内容: 我试图为我在1到60之间选择的每一行生成一个随机整数作为计时器。 我已经搜索并继续使用此FLOOR函数作为如何在范围内选择随机整数。这给我每一行1。我想念什么? 我在mysql 5.0.75上 我相信这是查询的其余部分,这可能是一个嵌套问题 问题答案: 这对我有用。您的mysql版本可能是?

  • 问题内容: 假设我有这个HTML元素: 并且用户用他的鼠标选择“家”。 我希望能够确定开始选择的字符数(以及选择结束的字符数)。即使他选择了HTML标签,这也应该起作用。(并且我需要它在所有浏览器中都能正常工作) 看起来很有希望,但是它仅是相对于范围的立即容器的偏移量,并且仅当容器是文本节点时才是字符偏移量。 问题答案: 更新 正如评论中指出的那样,我的原始答案(如下)仅返回选择的结尾或插入符号的

  • 试图了解发生这种情况时会发生什么。如果我们试图读取的偏移量丢失(我假设是因为kafka GC'ed the offet)和<code>auto.offset。reset=latest我们是否跳过数据到最新偏移量? 避免数据丢失的安全配置是什么?

  • 问题内容: 如何收集访问者的时区信息?我需要时区以及GMT偏移时间。 问题答案: var offset = new Date().getTimezoneOffset(); 时区偏移量是UTC与本地时间之间的差(以分钟为单位)。请注意,这意味着如果本地时区在UTC之后,则偏移量为正;如果在本地时区之前,则偏移量为负。例如,如果您的时区是UTC+10(澳大利亚东部标准时间),则将返回-600。夏时制即

  • 问题内容: 在SQL Server中,我需要找到给定的偏移量。 我已经研究了文档,并且有各种方法可以更改偏移量,但是没有一种方法可以了解特定值的偏移量(很抱歉,如果我错过了它)。 好吧,我想出了以下代码,尽管看起来似乎可行,但我觉得它太复杂了。 我仍然必须转换为+00:00格式,但想检查是否有更好的方法。 谢谢! 问题答案: datepart函数具有tz选项,它是时区偏移量(以分钟为单位)。

  • 我想展示一个IP的两个第一范围。例如,我127.0.0.1。我想得到127.0并使用这个例子: show show 我怎么能那样做? 我尝试了,但它显示了整个IP地址。