Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мне нужно заменить внутри редактора фрагмент текст, При keyup заменяется весь html 
:(
    Опции темы
artnik
Дата 5.6.2012, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.9.2011

Репутация: нет
Всего: нет



Мне нужно заменить внутри редактора фрагмент текста на HTML (%link% на <a href="http://site.ru" title="http://site.ru">%link%</a>). Но при изменении HTML-кода курсор каждый раз перебрасывается в начало.

Посоветуйте, что можно придумать в таком случае? Может есть способ замены только части html без замены всего кода?

Вот готовый урезанный код:

Код

<!doctype html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<textarea name="message">Какой-то текст %link%</textarea>
<script>
var
form = {
    message: {
        // генерация редактора
        designMode: function() {
            var message = $('textarea[name=message]');
            form.message.iframe = $('<iframe>').attr({scrolling:'no', src:'#', id:'messageFrame', name:'message'}); // создание iframe в памяти браузера (jQuery)
            message.hide().after(form.message.iframe); // прячем текстарею, на ее место ставим iframe
            form.message.idoc = form.message.iframe[0].contentDocument; // frame document
            form.message.$idoc = form.message.iframe.contents(); // jQuery frame document
            form.message.idoc.open();
            form.message.idoc.write('<html><head></head><body>' + message.val() + '</body></html>');
            form.message.idoc.close();
            form.message.body = form.message.$idoc.find('body');
            form.message.highlightLink();
            form.message.$idoc.keyup(form.message.highlightLink); // замена %link% при keyup
            form.message.idoc.designMode = 'on';
        },
        
        // замена ссылки
        highlightLink: function() {
            var ihtml = form.message.body.html(); // html фрейма
            var result = ihtml.replace(/%link%/g, '<a href="http://site.ru" title="http://site.ru">%link%</a>');
            form.message.body.html(result);
        }
    }
}
form.message.designMode();
</script>


Это сообщение отредактировал(а) artnik - 7.6.2012, 12:16
PM MAIL   Вверх
Amphiluke
Дата 5.6.2012, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Если вы не слишком хорошо знакомы со свойствами и методами интерфейса Range (в IE — TextRange), не делайте замену текста всякий раз при нажатии клавиш, делайте замену однократно — при отправке/сохранении и т.д., когда изменение положения каретки не страшно. Если же хочется все-тки разобраться с Range, ссылки выше. Возможно, у вас получится запоминать положение каретки перед заменой и затем восстанавливать ее. Возможно, помогут методы surroundContents / pasteHTML. Но будьте при этом готовы, что код может существенно разрастись, особенно если нужна кроссбраузерность.

Добавлено через 9 минут и 19 секунд
Да, еще обратите внимание на метод execCommand. С ним создавать гиперссылки может оказаться несколько проще (см. также пример по ссылке). Но если необходима кроссбраузерность, опять-таки может понадобиться писать «костыли».
PM   Вверх
artnik
Дата 5.6.2012, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.9.2011

Репутация: нет
Всего: нет



Спасибо Amphiluke, почитаю. Хотя конечно сложно в этом все разобраться
PM MAIL   Вверх
Aliance
Дата 6.6.2012, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



PM MAIL WWW ICQ Skype   Вверх
iff
Дата 6.6.2012, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 3
Всего: 16



artnik, если в тексте %link% может повторяться несколько раз, то неправильно.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
artnik
Дата 7.6.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 10.9.2011

Репутация: нет
Всего: нет



iff, спасибо за замечание, исправил

Это сообщение отредактировал(а) artnik - 7.6.2012, 12:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.