我正在使用rangy在IFrame选择中选择文本,但有些时候我需要滚动IFrame才能查看此选择。是否可以自动将IFrame滚动到所选文本?

最佳答案

您可以使用包含所选内容的锚点节点的元素的scrollIntoView()方法,但是这可能会滚动主文档以及iframe,例如,如果所选内容在文本节点中开始多行,则该方法可能也不精确。

var sel = rangy.getSelection();
var anchorNode = sel.anchorNode;
if (anchorNode) {
    if (anchorNode.nodeType != 1) {
        anchorNode = anchorNode.parentNode;
    }
    anchorNode.scrollIntoView();
}


最好的选择是使用选择范围的边界矩形,该矩形在大多数现代浏览器中都可以通过范围的getBoundingClientRect()方法获得,并手动滚动iframe的文档。但是,这不是普遍支持的,并且是相对于视口而不是文档的。这是一个相关的问题和答案:

https://stackoverflow.com/a/6847328/96100

10-08 04:15