2012-02-22 6 views
1

Предположим, у меня очень длинный абзац. Когда я нажимаю на строку, JS/jQuery добавит пустой тег <span> в начале этой конкретной строки - прямо перед первым словом в этой строке.Найдите номер строки слова в абзаце с JavaScript

f.e: Это мой пункт:

<p> 
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has. 
</p> 

Когда я нажимаю на второй линии, <span> тег будет вставить перед первым словом во второй строке.

Любые идеи, как это сделать?

+0

Итак, строка, определяемая оберткой, применяемой элементом контейнера? –

+1

Если вы не используете жесткие разрывы строк ('
'), я не думаю, что вы можете это сделать. –

ответ

2

jQuery не может обнаружить, где происходит завернутая линия, если это не происходит с жестко запрограммированным перерывом (<br /> или аналогичным).

Это - один из вариантов, хотя он немного взломан.

  1. Дубликат контейнер
  2. Дайте ему left из -3000 (чтобы сделать его невидимым, без использования display:none потому, что дает ему 0 высота)
  3. Удалить одно слово в то время (с использованием .lastIndexOf(' ')), и мера высота каждый раз. Когда он изменяет к наименьшему ненулевой высоте, что, где вы хотите вставить <span>, так что потом ...
  4. .substring() с позиции, которую вы только что нашли - .substring(0, position) + '<span>' + .substring(position)
+0

Хорошая идея, спасибо. Но как насчет производительности? Учтите, что параграф может быть очень длинным, если мне нужно будет передать каждое слово в параграфе при каждом щелчке, который пользователь уволил, он может быть тяжелым. – dsternlicht

+0

@fastrd Сравните '.length'' p' first, чтобы увидеть если он изменился - если нет смысла повторять его. Вы также можете перейти от пара, введя слова в новый параграф и посмотреть, когда он вырастет (что укажет на вашу новую строку). Таким образом, вы только переходите по первой линии. Клонировать оригинал, очистить его содержимое и отправить его за пределы экрана, а затем добавить слова из оригинального параграфа. – Joe

Смежные вопросы