Существует ли утвержденная замена Internet Explorer для selectionStart и selectionEnd?

У меня есть игровая площадка для вас здесь . Чтобы иметь несколько цветов для баров, вы должны закомментировать раздел Palette и добавить paletteMode="Item" в вашу серию баров.


Также Legend работает нормально, так как они представляют тип серии, и вы можете модифицировать legendTitle для каждой серии. Если вы хотите несколько легенд, вам нужно добавить несколько серий баров (для каждого крупного рогатого скота в вашем случае.)

19
задан swilliams 24 October 2008 в 23:21
поделиться

2 ответа

Мое текущее решение является подробным и на основе этот поток , но я открыт для лучших решений.

function getSelection(inputBox) {
    if ("selectionStart" in inputBox) {
        return {
            start: inputBox.selectionStart,
            end: inputBox.selectionEnd
        }
    }

    //and now, the blinkered IE way
    var bookmark = document.selection.createRange().getBookmark()
    var selection = inputBox.createTextRange()
    selection.moveToBookmark(bookmark)

    var before = inputBox.createTextRange()
    before.collapse(true)
    before.setEndPoint("EndToStart", selection)

    var beforeLength = before.text.length
    var selLength = selection.text.length

    return {
        start: beforeLength,
        end: beforeLength + selLength
    }
}
6
ответ дан 30 November 2019 в 03:43
поделиться

Реализация Диапазона IE является slithy ужасом. Это действительно хочет, чтобы Вы использовали отвратительный интерфейс execCommand вместо чего-либо индексация вовлечения в текст.

существует два подхода, о которых я знаю для получения индексов, и у них обоих есть проблемы. Первое использование range.text как в Вашем примере кода. К сожалению, range.text имеет привычку к снятию изоляции с ведущих и запаздывающих новых строк, что означает, ли каре/выбор в начале строки кроме первой, beforeLength будет выключен (количество newlines*2) символы, и Вы получите неправильный выделенный текст.

второй подход должен использовать range.moveStart/End (на дублированном диапазоне), как обрисовано в общих чертах в ответе на этот вопрос: Символьное смещение в Internet Explorer TextRange (однако, поскольку Вы используете известного родителя текстовой области, можно проигнорировать материал о нахождении узла). Это не имеет той же проблемы, но она действительно сообщает обо всех индексах, как будто новые строки были простыми символами LF, даже при том, что textarea.value и range.text возвратят их как последовательности CRLF! Таким образом, Вы не можете использовать их непосредственно для индексации в текстовую область, но можно или согласовать их с набором подсчета новой строки или просто строковой замены далеко весь CRS от значения перед использованием его.

7
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: