Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2012, 18:37
Аспирант
Отправить личное сообщение для zebra741258963 Посмотреть профиль Найти все сообщения от zebra741258963
 
Регистрация: 13.12.2011
Сообщений: 67

Можно ли захватить дополнительный текст вокруг выделенного?
Есть какой-то врагмент текста. Например:
<p>Наша Маша громко плачет <b>уронила</b> в реку мячик...</p>
Через jQuery я могу повесить на тег <B> событие, что при нажатии на него фраза которая в этом теге буде передана мне скажем через ajax (не важно как передаётся, хоть просто в alert выводится). Это легко...
А можно как-то сделать чтобы кроме этой фразы я получил ещё 10 символов до неё и 10 символов текста после неё?
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2012, 01:03
Аспирант
Отправить личное сообщение для zebra741258963 Посмотреть профиль Найти все сообщения от zebra741258963
 
Регистрация: 13.12.2011
Сообщений: 67

Может выше написал не ясно, по этому решил приложить код:
<p>Наша Маша громко плачет <b>уронила</b> в реку мячик...</p> 

<script src=jQuery.js></script>
<script>
$(document).ready(function()
 {

 $('b').click(function() {  alert($(this).text());  });

 });
</script>
Имеется текст в котором выделены слова. Если нажимаешь на выделенное слово - оно выводится (в данном случае выведется слово "уронила"). Но задача чтобы выводилось не только это слово, а более глубокий захват, дполнительно по 10 символов с обеих сторон. Ну к примеру в данном случае это было бы - "плачет <b>уронила</b> в реку" (или без тегов).
Ну может быть у кого-нибудь есть хотя бы теоретические идеи?
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2012, 01:30
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Теоретическая идея такова: берём элемент, смотрим соседние узлы. Если они текстовые, то берём 10 символов из них (если там меньше, то идём к другим соседям, возможно, поднимаясь вверх по иерархии), если узлы не текстовые, а обычные элементы, то смотрим их содержимое.
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2012, 02:55
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

я бы так сделал:

1. берём содержимое текущего (кликнутого) элемента (в вашем случае, "уронила").
2. берём html() родителя кликнутого элемента (получится: "Наша Маша громко плачет <b>уронила</b> в реку мячик...").
3. удаляем теги
4. регуляркой берём 10 символов до "уронила" и 10 символов после.
__________________
С моих слов записано верно.
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2012, 13:49
Аспирант
Отправить личное сообщение для zebra741258963 Посмотреть профиль Найти все сообщения от zebra741258963
 
Регистрация: 13.12.2011
Сообщений: 67

T-sh,
Это совершенно не правильный подход! В тексте слово "уронила" может встречаться много раз и часть из них может быть также выделена тегами. В том-то и задача, чтобы получить символы до и после именно вокруг того слова, по которому кликнули!

B@rmaley.e><e,
Всё правильно, придётся идти вверх по иерархии...
Но ведь тег "В" не разбивает фрагмент параграф на соседние узлы!
Я могу посмотреть содержимое тега В - "уронила".
Я могу подняться на родителя, и увижу содержимое параграфа - "Наша Маша громко плачет <b>уронила</b> в реку мячик..."
Но я не получу соседние узлы типа "Наша Маша громко плачет" и "в реку мячик..."
Ответить с цитированием
  #6 (permalink)  
Старый 01.04.2012, 16:17
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от zebra741258963 Посмотреть сообщение
T-sh,
Это совершенно не правильный подход! В тексте слово "уронила" может встречаться много раз и часть из них может быть также выделена тегами. В том-то и задача, чтобы получить символы до и после именно вокруг того слова, по которому кликнули!
что мешает запомнить позицию, если слово повторяется, и потом также брать по 10 символов от позиции вхождения в родительском .html()???

тут дело вкуса: кому-то нравится перебирать элементы, а кому-то легче со строкой работать.
__________________
С моих слов записано верно.
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2012, 18:19
Аспирант
Отправить личное сообщение для zebra741258963 Посмотреть профиль Найти все сообщения от zebra741258963
 
Регистрация: 13.12.2011
Сообщений: 67

T-sh,
Если я могу получить позицию вхождения моего объекта в родителе - это полностью решает вопрос. А переберать элементы всё равно придётся, ведь мне не надо чтобы в текст (в случае если он вначале/конце) вошол новостной блок или пункты меню из шапки сайта. Правда это уже технические мелочи...
Но как получить эту позицию текста в которой тот объект по которому кликнули?
Ответить с цитированием
  #8 (permalink)  
Старый 01.04.2012, 18:46
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от zebra741258963 Посмотреть сообщение
T-sh,
Но как получить эту позицию текста в которой тот объект по которому кликнули?

да много способов..

для начала нужно определиться, в каких тегах заключены "кликабельные" слова/фразы.

если по примеру <b> .. </b>, то в итоге примерно так:

по клику на него обернуть в нейтральный тег, который заведомо не встречается на странице, допустим <h6>..</h6>.

всё.

берем родительский .html(). в нём сначала ваши все заморочки с новостными блоками и прочим (удалить лишние теги и т.д.), а потом:

от позиции первого (единственного) вхождения "<h6>" -10 символов,
от позиции первого (опять-таки единственного) вхождения "</h6>" +10 символов

готово.
__________________
С моих слов записано верно.
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2012, 18:48
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

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

(позиция вхождения символа)-3 = начало нашего кликнутого элемента
(позиция вхождения символа)+ длина содержимого + 4 = конец нашего кликнутого элемента.

3 — это тег "<b>"
4 — "</b>"
__________________
С моих слов записано верно.
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2012, 21:04
Аспирант
Отправить личное сообщение для zebra741258963 Посмотреть профиль Найти все сообщения от zebra741258963
 
Регистрация: 13.12.2011
Сообщений: 67

Да, я не подумал что можно заменить на что-то уникальное, и потом вернуть обратно...
Завернуть легко - $(this).wrap('<strong>');
а как потом вывернуть? (избавиться от обёртки)
Я думал типа:
x=$(this);
z=$(this).parent();
z=x;
Но наверно что-то делаю не так. Ошибки не возникает, но встроенный в IE девелоупер тул, показывает:

Кстати ни как не могу понять, как видно на картинке, после оборачивания в strong мой старый B получил параметр jQuery17108889328545285118=1, но если я вывожу $(this).parent().html() я его не вижу, просто добавился стронг и всё:
Наша Маша громко плачет <strong><b>уронила</b></strong> в реку мячик...
Изображения:
Тип файла: png devtool.PNG (10.7 Кб, 9 просмотров)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
контекст вокруг выделенного слова в js Тима Элементы интерфейса 1 19.01.2011 08:28
Можно ли преобразовать текст строки в функцию? YISHIMITSY Общие вопросы Javascript 2 13.02.2010 12:13
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02
Можно ли приобразовать исходный текст изображения в само изображение )) human AJAX и COMET 7 20.03.2009 17:46
Можно ли одновременно изменить фон и текст в поле? Bad Request Events/DOM/Window 12 25.09.2008 23:10