【发布时间】:2016-07-07 17:32:16
【问题描述】:
我制作了一个区域选择器工具,它在屏幕上创建一个矩形并给出坐标(顶部、左侧、宽度和高度)。基本上我想在该矩形内获取所有(并且唯一)可见文本。此外,它应该是准确的文字,没有重复。
这就是我制作区域的方式:
我正在尝试这样的事情:
var top = parseInt($('#selectionn33').css('top'))
var left = parseInt($('#selectionn33').css('left'))
var width = parseInt($('#selectionn33').css('width'))
var height = parseInt($('#selectionn33').css('height'))
var items = document.getElementsByTagName("*");
for (var i = items.length; i--;)
{
var rect = items[i].getBoundingClientRect();
if(rect.top >= top && rect.top <= (top + height))
{
if(rect.left >= left && rect.left <= (left + width))
{
console.log(items[i].textContent);
}
}
}
但它会收到很多我不想要的文本,例如来自符合条件但位于矩形之外的元素的文本。
有什么想法可以做到这一点吗?
【问题讨论】:
-
如果您使用已知大小的固定宽度字体,是否可以在获取所有文本后将不属于矩形的文本中的字符修剪掉?
-
绝对没有简单的方法可以做到这一点。我最好的建议是使用
Range.getBoundingClientRect()并迭代设置范围的开始和结束,随时进行测试。这会很快变得丑陋且缓慢,但应该是可能的。 -
一个元素如何满足条件但在矩形之外?您想根据选择边框裁剪每一行文本吗?还是只有完全适合选择的元素?在从多个元素收集文本之后,您希望如何组织文本?您能否上传一张图片,详细说明预期的行为?
-
没错,如下图所示,我做了一个矩形区域选择工具。我想获取该矩形内的所有文本。 i.imgur.com/oT0MwPC.jpg
-
我会接受@nrabinowitz 告诉你的,也许结合Range.caretRangeFromPoint 你可以实现一些不那么丑陋但仍然很重的东西。
标签: javascript html