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

введите здесь описание изображения

На изображении выше я выбрал фразу «макрос сам», которая начинается с индекса 140 и заканчивается индексом 155.
(Индексы рассчитываются с помощью .outerHTML родительского элемента (div, содержащий весь текст) )

введите здесь описание изображенияТеперь, здесь, на втором изображении, вы можете видеть, что span (часть, которая создает голубая подсветка на снимке экрана 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.

Итак, мой вопрос: как мне получить точный индекс?


person NullVoxPopuli    schedule 09.11.2011    source источник
comment
Этот вопрос невероятно сбивает с толку.   -  person Pointy    schedule 09.11.2011
comment
как мне лучше уточнить? в основном индексы HTML не соответствуют индексам того же текста, хранящегося на стороне сервера.   -  person NullVoxPopuli    schedule 09.11.2011
comment
Я думаю, что основная проблема, с которой я сталкиваюсь, заключается в том, чтобы понять, что вы имеете в виду, используя слово «индекс».   -  person Pointy    schedule 09.11.2011
comment
Это тяжело. Я собирался порекомендовать перенос на основе обнаружения регулярных выражений (где вы можете игнорировать все теги html) вместо индекса, но это потребовало бы от вас определения того, какой экземпляр совпадения следует обернуть. (т. е. если вы попытались обернуть фразу «я есть», и «я есть» появляется 8 раз)   -  person rkw    schedule 09.11.2011
comment
@Pointy: ну, просто... индекс подстроки в строке. Строка, являющаяся родительским элементом DOM. и подстрока является дочерним элементом DOM.   -  person NullVoxPopuli    schedule 09.11.2011
comment
@rkw Не беспокойтесь о повторяющихся подстроках, я окружаю выделенный текст очень определенным диапазоном, поэтому его легко найти.   -  person NullVoxPopuli    schedule 09.11.2011
comment
Сериализованный HTML, который вы получаете из DOM (через innerHTML и outerHTML), не обязательно точно соответствует эквивалентному исходному HTML, отправленному сервером. В таком случае попытки сделать это таким образом бесполезны.   -  person Tim Down    schedule 09.11.2011
comment
@TimDown Другой способ, который я могу придумать, - это просто отправить весь содержащий элемент на сервер, перезаписав исходный html, хранящийся на сервере. Это правильный способ сделать это? Я имею в виду, как бы я справился с двумя разными пользователями, изменяющими один и тот же html одновременно?   -  person NullVoxPopuli    schedule 09.11.2011
comment
@TheLindyHop Похоже, вы создаете клон EtherPad.. Операционная трансформация — это то, как это делается для обработки DOM несколькими пользователями одновременно.   -  person sirhc    schedule 15.11.2011


Ответы (1)


Возможно, вам нужна более чистая версия текста для работы (похоже, у вас там пустое место). Что-то типа:

start_index = $.trim(parent_element.text())

На стороне ruby ​​вам может понадобиться сделать то же самое, чтобы убедиться, что у вас нет пробелов ни на одном из них. Кроме того, ваш вывод показывает некоторые объекты html (&#39;), поэтому в коде ruby ​​вам может понадобиться убедиться, что вы работаете с индексами строки до, когда специальные символы будут закодированы в html.

person Jeff Gran    schedule 29.11.2011