【问题标题】:Issue with IE Selection and RangeIE 选择和范围问题
【发布时间】:2010-09-18 02:20:27
【问题描述】:

我正在尝试获取选择的开始元素和结束元素以及每个选择的偏移量,我在 Firefox 中执行以下操作:

var delselection = window.getSelection();

var startOffset = delselection.anchorOffset;

var endOffset = delselection.focusOffset;

var startNode = delselection.anchorNode.parentNode;

var endNode = delselection.focusNode.parentNode;

但是我不知道如何在 IE6 中做到这一点,谁能指出我正确的方向?

【问题讨论】:

    标签: javascript internet-explorer selection-object


    【解决方案1】:

    如果您知道选择所在的对象(例如,它是用户正在输入的输入字段,您想在他们输入时更改),则此代码可以解决问题:

    var selObj = null;
    var selSave = null;
    var selSaveEnd = null;
    
    function SaveSelection(obj) {
        if (obj.selectionStart) {
            selObj = obj;
            selSave = obj.selectionStart;
            selSaveEnd = obj.selectionEnd;
        }
        else {
            // Internet Explorer case
            selSave = document.selection.createRange();
        }
    }
    
    function RestoreSelection() {
        if (selObj) {
            selObj.focus();
            selObj.selectionStart = selSave;
            selObj.selectionEnd = selSaveEnd;
        }
        else {
            // Internet Explorer case
            selSave.select();
        }
    }
    

    【讨论】:

      【解决方案2】:

      document.selection.

      但是 IE 返回的 TextRange 对象与 Firefox/WebKit/W3 的不匹配,确定起点和终点的确切位置非常令人沮丧。根据您对范围所做的具体操作,您可以使用 range.parentElement()、range.inRange() 或 range.compareEndPoints() 获得某个位置。对于富文本编辑器,您通常最终会使用丑陋的 range.execCommand() 接口。

      IE Range 实现非常奇怪,与 Mozilla/Webkit/W3 模型完全不同,以至于您通常会使用完全不同的代码路径来处理两者之间的选择。

      【讨论】:

      • 在所有浏览器中使用选择和范围非常痛苦,但不适合胆小的人。这些都是很好的提示,谢谢 bobince!
      【解决方案3】:

      您应该查看 IE BOM 的 ControlRangeTextRange 对象。

      我相信 IE6/7 不支持 AnchorOffset、focusOffset 和 window.getSelection()。

      【讨论】:

      • anchorOffset 等是用于处理选择的 Firefox 方法,只是将它们放在那里以了解我在尝试什么。 textRange 对象只是给出了相对于文档边缘的偏移量,所以我假设它以像素为单位,我认为您不能将 controlRange 对象与选择一起使用
      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多