как я могу найти слово в том, что курсор находится - PullRequest
1 голос
/ 25 апреля 2009

Как я могу определить слово, на котором находится курсор в IE? Я пытался с этим кодом:

window.setInterval(function () {
    var range = document.selection.createRange();
    range.expand('word');
    var wort = range.text.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    document.getElementById("ausgabe").innerHTML = wort;
}, 100)
<textarea id="ta" rows="10" cols="40">At vero eos et accu-samus et iusto? Odio, dignissimos. ducimus qui bländitiis praeséntium voluptatèm deleniti atque corrupti quos</textarea>
<p>[<span id="ausgabe"></span>]</p>

Но проблема возникает, когда я устанавливаю курсор в начале и конце Textarea это дает мне полный текст. Как я могу это исправить?

1 Ответ

0 голосов
/ 31 мая 2009

Я уверен, что есть лучший способ решить эту проблему, поэтому я надеюсь, что кто-то еще также пролил некоторый свет на эту проблему. Это решение использует некоторые методы проб и ошибок для перемещения диапазона - если что-то не так, он возвращается в исходное состояние.

Надеюсь, это поможет!

Вот код:

<html>
<body>
<script>
    window.setInterval(
        function () {
            var selection = document.selection;
            var range = document.selection.createRange();

            var parentEl = range.parentElement();

            // Make a duplicate range to revert to if things go wrong.
            range2 = range.duplicate();

            range.moveStart('character', 1);
            if (range.parentElement() != parentEl) {
                // We've left the original parent (which is bad), so revert to the original range. We're probably at the end of the textarea.
                range = range2.duplicate();
            }
            range.moveStart('word', -1);

            // Make a new duplicate range to revert to.
            range2 = range.duplicate();

            // Move the end of the range one backwards, then forward to the end of the word.
            range.moveEnd('character', -1);
            range.moveEnd('word', 1);
            if (range.parentElement() != parentEl) {
                range = range2.duplicate();
                while (range2.parentElement() == parentEl) {
                    range.moveEnd('character', 1);
                    range2 = range.duplicate();
                }
            }

            var wort = range.text.replace(/^\s\s*$/, '').replace(/\s\s*$/, '');
            document.getElementById("ausgabe").innerHTML = wort;
        }, 100
    )
</script>

    <textarea id="ta" rows="10" cols="40">At vero eos et accu-samus et iusto? Odio, dignissimos. ducimus qui bländitiis praeséntium voluptatèm deleniti atque corrupti quos</textarea>

<p>[<span id="ausgabe"></span>]</p>
</body>
</html>
...