Javascript range.select在IE10上无法正确突出显示文本

Javascript range.select在IE10上无法正确突出显示文本,javascript,html,internet-explorer,cross-browser,Javascript,Html,Internet Explorer,Cross Browser,我有一个应用程序,它在一个文本区域中循环,搜索特定的文本,如果找到,突出显示它,并提示用户是否对找到的文本采取行动。这在IE10之前的所有版本的IE上都很有效(文本高亮显示,并提示用户) 在IE10中,range.select将不再突出显示文本,原因是出现了确认提示。如果删除“确认”,则文本将高亮显示。同样在IE 10上,在最后一次确认确定后,当表单返回焦点时,文本的最后一个实例将突出显示 下面是一段代码片段,它可以演示这一点,在IE5、6、7、8、9下可以正常工作,但在IE10上会失败。任何关

我有一个应用程序,它在一个文本区域中循环,搜索特定的文本,如果找到,突出显示它,并提示用户是否对找到的文本采取行动。这在IE10之前的所有版本的IE上都很有效(文本高亮显示,并提示用户)

在IE10中,range.select将不再突出显示文本,原因是出现了确认提示。如果删除“确认”,则文本将高亮显示。同样在IE 10上,在最后一次确认确定后,当表单返回焦点时,文本的最后一个实例将突出显示

下面是一段代码片段,它可以演示这一点,在IE5、6、7、8、9下可以正常工作,但在IE10上会失败。任何关于重新设计或其他代码替代方案的帮助都将不胜感激。我只需要在IE环境中工作(内部应用程序,仅限于IE使用)



南/琼斯南/史密斯南/布朗
var message=document.theForm.message.value.toUpperCase();
var range=document.theForm.message.createTextRange();

对于(x=0;x我有类似的问题,我根据您的问题和我们有问题的代码做了一个演示

<?xml version="1.0" encoding="ISO-8859-1" ?>
<html>
<head>
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
</head>
<body>

    <form name="theForm">
        <input type="text" id="txt" value="1234567890" />
        <span id="selected" />
    </form>

    <script>
        function selectRange(start, end) {
            var range = document.theForm.txt.createTextRange();
            range.moveStart("character", 0 - end);
            range.moveEnd("character", 0 - end);
            range.select();
            // Und dann den neu hinzugekommenen Teil markieren.
            range.moveStart("character", start);
            range.moveEnd("character", end - start);
            range.select();
        }
        function step(x) {
            if (x >= document.theForm.txt.value.length - 2)
                return;
            selectRange(x, x + 2);
            document.getElementById("selected").innerHTML = document.selection.createRange().text;
            window.setTimeout(function () { step(x + 1); }, 1000);
        }
        step(0);
    </script>

</body>
</html>

我希望这有帮助。

其他浏览器做什么?我猜确认模式窗口会被聚焦,它可以从范围内移除视觉焦点。这听起来对我来说是可以接受的。你可以考虑实现你自己的模态窗口,它不会窃取焦点(但实际上:它应该)。没有在其他浏览器上测试过它…我们在这个环境中以IE为中心。不幸的是,由于我正在循环遍历每个找到的项目,我需要一种方法来暂停脚本,并等待输入。这有点需要确认窗口来获得焦点?但是,可能需要使用另一种形式的模式输入来实现。以前它工作得太糟糕了y、 …f12在说什么?设置一个提交按钮而不是确认提示如何?阅读textRangeSelect atm,但我不确定这是您需要的我会给f12开发工具一个视图,看看它说了什么。不幸的是,一个按钮真的不能以这种方式工作。用户确实按下一个按钮来启动textarea搜索,但是代码需要在文本区域中读取/循环,每次出现NAM时都会提示他们。看起来我可能需要找到另一种模式提示,这将使屏幕能够升级并显示突出显示的文本。谢谢。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<html>
<head>
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
</head>
<body>

    <form name="theForm">
        <input type="text" id="txt" value="1234567890" />
        <span id="selected" />
    </form>

    <script>
        function selectRange(start, end) {
            var range = document.theForm.txt.createTextRange();
            range.moveStart("character", 0 - end);
            range.moveEnd("character", 0 - end);
            range.select();
            // Und dann den neu hinzugekommenen Teil markieren.
            range.moveStart("character", start);
            range.moveEnd("character", end - start);
            range.select();
        }
        function step(x) {
            if (x >= document.theForm.txt.value.length - 2)
                return;
            selectRange(x, x + 2);
            document.getElementById("selected").innerHTML = document.selection.createRange().text;
            window.setTimeout(function () { step(x + 1); }, 1000);
        }
        step(0);
    </script>

</body>
</html>
this.selectTextRange = function (start, end) {
    window.setTimeout(function() {
        var range = thisControl.textBox.createTextRange();
        // Ganz an den Anfang moven     
        range.moveStart("character", 0 - end);
        range.moveEnd("character", 0 - end);
        range.select();
        // Und dann den neu hinzugekommenen Teil markieren.
        range.moveStart("character", start);
        range.moveEnd("character", end - start);
        range.select();
    }, 0);
};