Javascript:错误800a025e使用范围选择器

rea*_*ebo 16 javascript internet-explorer-11

我正在执行最新的这些简单的javascript行,即11,只是为了选择div的所有内容

这里是ie11开发工具的截图

代码和错误 - 截图

就像你可以看到的那样,IE改变了我的说法:"因错误800a025e而无法完成操作".

我无法理解问题的本质,来源和问题,而且我读过的其他堆栈溢出问题都没有给我一个明确的答案.

这是我的selectText jQuery"个人"扩展的完整代码

jQuery.fn.selectText = function(){
    var doc = document;
    var element = this[0];
    // console.log(this, element);
    if (typeof element == 'undefined') {
        return;
    }
    if (doc.body.createTextRange) {
        var range = document.body.createTextRange();
        range.moveToElementText(element);
        range.select();
    } else if (window.getSelection) {
        var selection = window.getSelection();        
        var range = document.createRange();
        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);
    }
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下的元素是

[Object HTMLTableElement]
Run Code Online (Sandbox Code Playgroud)

编辑1:用一点mod:

var range = document.body.createTextRange();
var retval = range.moveToElementText(element);
console.log (retval);
range.select();
Run Code Online (Sandbox Code Playgroud)

我可以说你的retval未定义.这段代码在ff上没有问题,因此元素选择器很好.jQuery版本是1.11

rea*_*ebo 8

我决定使用这个技巧:

我用DIV包装了html表

我对DIV使用相同的代码,没有任何更改,而不是仅用于选择表.

它正在发挥作用.

可能html表不是IE的可选文本


kam*_*kev 6

上述建议或提示均未正确解决此特定问题.

问题本身是由非文本(例如表格)元素与TextRange集合中的其他元素一起收集而引起的.在这些表元素保留在集合中时尝试清除集合将无条件地导致上述报告的错误.

该问题影响IE 9/10/11,并且每个浏览器都有特定的解决方法.不幸的是,这些变通办法与其他浏览器(firefox,safari,chrome,edge)不兼容,因此我们需要特殊情况下对IE 9/10/11的清晰处理,同时为更符合标准的浏览器提供备用处理.以下似乎随处可见,至少在撰写本文时:

      if (doc.body.createTextRange) { // All IE but Edge
        var range = doc.body.createTextRange();
        range.collapse();
        range.select();
      }
      else {
        doc.getSelection().removeAllRanges();
      }
Run Code Online (Sandbox Code Playgroud)

IE特定分支是一种清除包含表元素的范围的迂回方式,而不实际调用empty()方法,否则会导致麻烦的异常.