当前位置: 首页 > 面试题库 >

浏览器页面中所选文本的坐标

汪博达
2023-03-14
问题内容

我需要文本选择开始处的像素坐标(在页面上的任何地方,而不是文本区域中)。

我尝试使用光标坐标,但是效果不佳,因为光标坐标和选择的开头并不总是相同的(例如,当用户将鼠标拖到文本上时)。

希望有人能解决!


问题答案:

在IE> = 9和非IE浏览器(Firefox4+,自2009年初发布的WebKit浏览器,Opera11,也许更早)中,可以使用的getClientRects()方法Range。在IE4-10中,您可以使用的boundingLeftboundingTop属性,这些属性TextRange可以从选择中提取。这是一个功能,可以在最新的浏览器中完成您想做的事情。

请注意,在某些情况下,您可能会错误地获取坐标0,0,如@Louis的注释中所述。在这种情况下,您将不得不采用临时插入元素并获得其位置的解决方法。

码:

function getSelectionCoords(win) {
    win = win || window;
    var doc = win.document;
    var sel = doc.selection, range, rects, rect;
    var x = 0, y = 0;
    if (sel) {
        if (sel.type != "Control") {
            range = sel.createRange();
            range.collapse(true);
            x = range.boundingLeft;
            y = range.boundingTop;
        }
    } else if (win.getSelection) {
        sel = win.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(0).cloneRange();
            if (range.getClientRects) {
                range.collapse(true);
                rects = range.getClientRects();
                if (rects.length > 0) {
                    rect = rects[0];
                }
                x = rect.left;
                y = rect.top;
            }
            // Fall back to inserting a temporary element
            if (x == 0 && y == 0) {
                var span = doc.createElement("span");
                if (span.getClientRects) {
                    // Ensure span has dimensions and position by
                    // adding a zero-width space character
                    span.appendChild( doc.createTextNode("\u200b") );
                    range.insertNode(span);
                    rect = span.getClientRects()[0];
                    x = rect.left;
                    y = rect.top;
                    var spanParent = span.parentNode;
                    spanParent.removeChild(span);

                    // Glue any broken text nodes back together
                    spanParent.normalize();
                }
            }
        }
    }
    return { x: x, y: y };
}


 类似资料:
  • 我现在有一个文件,该文件在中呈现为每页一个图像 在此步骤中保存的图像将在浏览器中预览。用户可以将图像拖放到这个预览中,然后我将这个坐标映射到真实的PDF,但总是有些误差。下面是我的映射方式: x:浮点目标x=(previewX 1.0f/previewWidth)PDFPageWidth; y:float targetY=pdfPageHeight-(previewY 1.0f/previewHe

  • 页面浏览分为两部分: 时间/页面筛选 和 页面浏览详情 1.时间/页面筛选 1)便捷按钮有今日、昨日、前日、上周 X、近七天 2)能自定义选择时间段,同时能搜索出个别字眼的页面来得出想要的结果报表 2.页面浏览详情 1)页面浏览,是指被浏览的网页,点击表头可以按相应的项目排序 2)如有需要,亦可点击下载当前报表及更多数据下载,将报表下载到个人电脑,以供存档及分析 3)点击 [细] 可查看访

  • 问题内容: 我已经在SO和其他一些网站上以几种不同的方式问过这个问题,但是其中大多数要么太具体,要么已经过时。我希望有人可以在这里提供明确的答案,而不必担心猜测。 当有人在浏览器中打印时,是否可以使用CSS或javascript更改默认打印机设置?当然,“从他们的浏览器打印”是指某种形式的HTML,而不是PDF或其他依赖于插件的mime类型。 请注意: 如果某些浏览器提供了此功能,而另一些却不提供

  • 统一使用 Chrome 作为 Web 开发者,我们的无论是浏览信息或者开发项目,都离不开浏览器。在本站的系列课程中,为了避免歧义,我们 要求 大家统一使用 Chrome 作为指定浏览器。 Google Chrome,是一款由 Google 公司开发的网页浏览器。Chrome 在 2008 年 9 月 2 日发布 Beta 版本,一经发布就广受好评。提供 50 种语言版本,有 Windows、OS

  • 问题内容: 我想做一个闪烁的文本。 首先,我尝试了HTML标记,但仅Mozilla Firefox支持。 然后我尝试了CSS: 在IE 6上无法正常工作。 然后我尝试了javascript: 现在,它无法在Safari或Chrome上运行。 有人可以帮我使用可在所有流行浏览器上运行的闪烁文本吗?(IE 6,Mozilla Firefox,Google Chrome Safari,Opera。) 问

  • 问题内容: 我很难在大多数浏览器中使用此功能,但IE(甚至在IE6中也可以正常运行)和Opera除外。 Firefox可以正确分隔div,但仅打印第一页。 Chrome和Safari仅将分页符应用于最后一个div。 如何才能在所有浏览器上正常工作? HTML: 具有ID 和的div 设置为,因此显示效果很好。 我只想打印类,并使用CSS 隐藏和的其余部分。 CSS: 问题答案: 父元素不能放在它们