Есть ли способ преобразовать текст ruby в текст HTML для целей индексирования? или как мне точно получить индекс текста в HTML?

#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.