我正在使用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