JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 从FF / Webkit中的像素位置创建折叠范围大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用 JavaScript,我想从像素位置创建一个折叠的范围,以便在此位置标识的范围之后,在文档流中插入新节点.

这可以通过Internet Exporer(moveToPoint(x,y)方法)中的TextRange对象来完成.

我如何在FireFox& WebKit的?

我可以从document.elementFromPoint(x,y)的位置获取容器元素.但是,当位置恰好位于文本节点内时,如何获取有关构建范围所需的文本偏移量的更多信息?

解决方法

以下是我对旧浏览器的caretRangeFromPoint的实现:
if (!document.caretRangeFromPoint) {
    document.caretRangeFromPoint = function(x,y) {
        var log = "";

        function inRect(x,y,rect) {
            return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
        }

        function inObject(x,object) {
            var rects = object.getClientRects();
            for (var i = rects.length; i--;)
                if (inRect(x,rects[i]))
                    return true;
            return false;
        }

        function getTextNodes(node,x,y) {
            if (!inObject(x,nodE))
                return [];

            var result = [];
            node = node.firstChild;
            while (nodE) {
                if (node.nodeType == 3)
                    result.push(nodE);
                if (node.nodeType == 1)
                    result = result.concat(getTextNodes(node,y));

                node = node.nextSibling;
            }

            return result;
        }

        var element = document.elementFromPoint(x,y);
        var nodes = getTextNodes(element,y);
        if (!nodes.length)
            return null;
        var node = nodes[0];

        var range = document.createRange();
        range.setStart(node,0);
        range.setEnd(node,1);

        for (var i = nodes.length; i--;) {
            var node = nodes[i],text = node.nodeValue;


            range = document.createRange();
            range.setStart(node,0);
            range.setEnd(node,text.length);

            if (!inObject(x,rangE))
                conTinue;

            for (var j = text.length; j--;) {
                if (text.charCodeAt(j) <= 32)
                    conTinue;

                range = document.createRange();
                range.setStart(node,j);
                range.setEnd(node,j + 1);

                if (inObject(x,rangE)) {
                    range.setEnd(node,j);
                    return range;
                }
            }
        }

        return range;
    };
}

大佬总结

以上是大佬教程为你收集整理的javascript – 从FF / Webkit中的像素位置创建折叠范围全部内容,希望文章能够帮你解决javascript – 从FF / Webkit中的像素位置创建折叠范围所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。