js 文本划选 第一次划取执行的时候没有问题,获取的起始位置是相对于div标签的。
执行之后会向html中添加span标签
第二次划取span标签后的文字的时候,获取的起始位置却是相对于span标签的
有没有方法每次获取的起始位置都是相对于div的?
你的问题似乎是关于在JavaScript中处理文本选择(文本高亮或划取)时,如何确保获取的起始位置始终基于特定的div元素,而不是基于其后添加的span元素。
当你在一个div内部添加span元素后,文本选择(例如,用户通过鼠标拖拽选择文本)的起始和结束位置将基于当前的DOM结构来确定。这意味着,如果选择的文本跨越了div和span的边界,那么起始和结束位置可能会相对于span,而不是原始的div。
为了解决这个问题,你可以采取以下策略:
Range
和Selection
API提供了丰富的工具来操作文本选择。你可以使用这些API来获取选择的文本及其位置,并手动调整它们以基于div而不是span。这是一个基本的示例,展示了如何使用Range和Selection API来获取选择的文本及其相对于特定元素的位置:
function getSelectedTextAndOffset(relativeToElement) { const selection = window.getSelection(); if (selection.rangeCount > 0) { const range = selection.getRangeAt(0); const startOffset = range.startOffset; const endOffset = range.endOffset; // 找到相对于relativeToElement的起始和结束位置 const rect = relativeToElement.getBoundingClientRect(); const startRect = range.getBoundingClientRect(); const endRect = new Range().setStart(range.endContainer, range.endOffset).getBoundingClientRect(); // 计算偏移量 const startOffsetRelativeToDiv = startRect.left - rect.left; const endOffsetRelativeToDiv = endRect.left - rect.left; const selectedText = range.extractContents().textContent; return { text: selectedText, startOffset: startOffsetRelativeToDiv, endOffset: endOffsetRelativeToDiv }; } return null;}// 使用方法:const divElement = document.getElementById('yourDivId');const { text, startOffset, endOffset } = getSelectedTextAndOffset(divElement);console.log('Selected text:', text);console.log('Start offset relative to div:', startOffset);console.log('End offset relative to div:', endOffset);
请注意,这个示例是一个基本的起点,可能需要根据你的具体需求进行调整。特别是,它假设选择的文本都在一个单一的div内,并且没有考虑更复杂的DOM结构或跨多个元素的选择。
$format = new \Vtiful\Kernel\Format($fileHandle); $style = $format->strikeout()->toResource();
一个JS文件想使用本地一个JSON文件中的数据 百度了下,发现不能直接去读取这个JSON文件。可以通过JQUERY的一个方法或者new XMLHttpRequest();这样来获取到JSON文件中的内容,不知道还有没有其他更简洁的方法? https://segmentfault.com/a/1190000038275195
我想更改编辑文本下面的蓝色,我不知道它是什么属性。 我试着用不同的背景色,但没用。 我在下面附上了一张图片:
js函数参数占位符报错问题 经网上搜索,如果函数传入多个值,但是又没有使用第一的值,可以用_符号进行展位,但是自己写代码时会发现浏览器报错。代码如下 报错信息: 该怎么占位呢?
所以我使用了这个图表。jshttp://www.chartjs.org/docs/我不能改变底部文字的颜色 例如:“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”以及左侧的数字 我尝试了所有这些选项: scaleFontColor: “#FFFFFF” pointLabelFontColor: “#FFFFFF” 我的完整代码:
版本生命周期 版本 状态 积极支持截止时间 安全维护截止时间 发布或预计发布时间 3.0 研发中 / / 2021-06-20 2.1 积极支持中 / / 2020-12-28 2.0 安全维护中 2020-12-28 2021-06-30 2020-06-22 1.1 停止维护 2020-06-23 2020-12-31 2019-10-08 1.0 停止维护 2019-10-08 2019-1