Выделение длинных предложений с помощью jQuery

Я хотел бы выделиться, длинные предложения (скажите, 50 слов или больше), содержавшийся в массиве объектов абзаца на странице, т.е. $("#content p"). Я не уверен, как заняться этим.

Я первоначально пытался выделить все предложения, но работал в проблеме, когда они содержали HTML-тэги (код выделения в качестве примера сети, кажется, для отдельных слов только, таким образом, они не принимают дочерние узлы во внимание). Я знаю, что разделение предложений является трудным; я хотел бы использовать.!? сопровождаемый или пространством затем прописная буква или ничем вообще (т.е. конец абзаца).

Заранее спасибо за любую справку/совет.

6
задан hippietrail 17 September 2014 в 06:40
поделиться

4 ответа

Как вы сказали, будет сложно сделать все правильно, учитывая тот факт, что вы; не собираетесь их всех ловить, я бы придерживался чего-нибудь простого, например:

var regex = \[^.!?]{50,}[.!?]\;

Если вы станете слишком умным, вы в конечном итоге потратите больше времени на кодирование для крайних случаев, чем я думаю, вам разумно хотелось бы.

2
ответ дан 17 December 2019 в 20:31
поделиться

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

Сначала возьмите все содержимое параграфа и убедитесь, что оно находится в нескольких узлах DOM. (Read This) Затем вам нужно будет сделать парсер, который будет искать разделенные символы, игнорируя их, пока они находятся в HTML-сущностях.

Например, символ . в атрибуте href должен игнорироваться и не разделяться. Во время парсинга вы можете вести подсчет слов, а также работать над пробелами. Сделайте каждое предложение объектом, содержащим все предложение и количество слов. Затем вы можете поместить эти объекты в массив, представляющий абзац. После этого вы можете просмотреть массив и обернуть любое предложение в span для выделения с помощью CSS, если количество слов достигнет порогового значения.

Основной проблемой являются теги, которые могут быть частями двух предложений, как, например, следующее.

I'm typing <b> in bold. NOW!</b>

То, о чем я говорил, с этим не справляется, но вы можете сделать парсер более сложным, чтобы поддерживать это.

Итак, краткий обзор моего бессвязного разбора всех символов с машиной состояний, которая занимается подсчетом слов и разделением в нужном месте. При разделении добавьте собранные данные в массив. По завершении итерация по массиву выводит новые завернутые предложения.

0
ответ дан 17 December 2019 в 20:31
поделиться

Это, вероятно, довольно медленное решение и уродливое тоже, но его должно быть довольно просто кодировать:

Прочтите весь текст в строку, а затем проанализируйте его, подсчитав символы и найдя каждый.!? - символ. В цикле анализа вы также ищите <и>, где <означает «игнорировать все.!?, Пока не будет найдено другое>». Затем каждый раз, когда вы находите символ.!? -, вы проверяете длину с момента последнего, и если он достаточно длинный, вы сохраняете индекс для начальной и конечной точки в массив или что-то в этом роде.

Когда все будет сделано, создайте еще один цикл, который перемещает подстроки из первой строки в новую строку, добавляя к каждому «длинному предложению» метку выделения и добавляя конечную метку выделения в конец строки. это, прежде чем двигаться дальше.

Когда закончите, верните новую строку туда, откуда вы ее взяли ...

0
ответ дан 17 December 2019 в 20:31
поделиться

Для этого вам нужно получить HTML-код каждого абзаца ( node.html () ), а затем заменить все HTML-теги таким же количеством пробелов. Это должно быть довольно просто, так как вы можете просто искать открывающиеся угловые скобки и первую закрывающую скобку. Это необходимо сделать во-первых, чтобы не допустить, чтобы любые точки и слова внутри тега сбивали с толку остальную часть алгоритма, а также чтобы сам тег не считался словом.

Разделите текст на основе точки, за которой следует ничего или любое количество пробелов, чтобы получить предложения. Вам нужно выполнить это разделение вручную, используя соответствующее регулярное выражение, чтобы вы могли отслеживать начальную и конечную позиции предложения в исходной строке.

Затем разделите каждое предложение на пробелы и удалите все «слова» из массива, которые состоят только из пробелов. Это дает вам длину предложения. Если он превышает ваш предел, вставьте соответствующий HTML-код в начальную и конечную позиции предложения в исходной строке HTML. Вам нужно будет отслеживать, сколько дополнительного HTML вы добавили, чтобы вы могли найти правильные начальные и конечные позиции последующих длинных предложений.

0
ответ дан 17 December 2019 в 20:31
поделиться
Другие вопросы по тегам:

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