#javascript #jquery #dom #selection #range
#javascript #jquery #dom #выделение #диапазон
Вопрос:
На приведенном выше изображении я выбрал фразу «макро сам», которая начинается с индекса 140 и заканчивается индексом 155.
(Индексы вычисляются через .outerHTML родительского элемента (div, содержащий весь текст))
Теперь, здесь, на втором изображении, вы можете видеть, что интервал (часть, которая создает светло-синюю подсветку на скриншоте HTML) размещен не там, где он должен быть. Также обратите внимание на цифры в левом верхнем углу. Начальный индекс тот же, а конечный индекс — это просто конечный индекс с первого изображения длина <span class="cha... ...50">
Как я получаю индексы: Со стороны javascript: (как на первом рисунке)
start_index = parent_element.html().indexOf(selection[0].outerHTML) - 33; // already have a large arbitrary offset, but I'd prefer to know why the indexes aren't lined up.
end_index = start_index html.length;
Эти индексы передаются на сервер rails, где он должен вставлять интервалы в текст, но индексы не соответствуют расположению выделения интервала в HTML.
Итак, мой вопрос: как мне получить точный индекс?
Комментарии:
1. Этот вопрос невероятно запутанный.
2. как я могу лучше уточнить? в основном индексы HTML не совпадают с индексами одного и того же текста, хранящегося на стороне сервера.
3. Я думаю, что основная проблема, с которой я сталкиваюсь, заключается в понимании того, что вы имеете в виду, используя слово «индекс».
4. Это непростая задача. Я собирался рекомендовать перенос на основе обнаружения регулярных выражений (где вы можете игнорировать все html-теги) вместо индекса, но для этого вам потребуется определить, какой экземпляр соответствия переносить. (т. Е. Если вы попытались перенести фразу «я есть», а «i am» отображается 8 раз)
5. Сериализованный HTML, который вы получаете из DOM (через
innerHTML
иouterHTML
), не обязательно точно соответствует эквивалентному исходному HTML, отправленному сервером. В таком случае попытки сделать это таким образом бесполезны.
Ответ №1:
Возможно, вам нужна более чистая версия текста для работы (похоже, у вас там есть пробелы). Что-то вроде:
start_index = $.trim(parent_element.text())
На стороне ruby вам может потребоваться сделать то же самое, чтобы убедиться, что у вас нет пробелов ни в одном из них. Также ваш вывод показывает некоторые html-объекты ( amp;#39;
), поэтому в коде ruby вам может потребоваться убедиться, что вы работаете с индексами строки, прежде чем специальные символы будут закодированы в html.