я вот тут накодил: bb - это ББ код типа b или u selection - выделенный текст [js]function setbb(bb) { var selection = ''; if ( window.getSelection ) { selection = window.getSelection(); } else if ( document.selection ) { selection = document.selection.createRange().text; } else if ( document.getSelection ) { selection = document.getSelection(); } document.getElementById('text_fild').focus(); document.getElementById('text_fild').value=document.getElementById('text_fild').value.replace('/'+selection+'/','['+bb+']'+selection+'[/'+bb+']'); // вот тут что-то не работает document.getElementById('text_fild').blur(); return; }[/js] Вобщем почему-то replace() не работает...незнаю почему мб потому что selection не регулярка а выделенный текст...
1. Используйте объект RegExp. Код (Text): new RegExp(selection, '') 2. Если хотите получить выделенный текст из textarea в FF или Opera, getSelection не поможет. Используйте свойства selectionStart и selectionEnd.
Я чесно говоря не очень силён в JS Мб поэтому у меня ничего не получается =( Но вот selection не пустая проверил через alert() Вобще наверно надо написать что мне конкретно нужно: Функция JS работающая также как str_replace() в пхп и с помощью неё нужно поставить выделенный текст selection в [bb]selection[/bb] где bb переменная с названием ББ кода
Да, window.getSelection() вернет вам выделение, но не то, что нужно (в случае textarea). С replace вы сделали все правильно, но регулярное выражение у вас строится из переменной, поэтому литеральная запись здесь не подойдет. В общем, вот примерный кроссбраузерный вариант: [js]function setbb(bb) { var selection = '', ta = document.getElementById('text_fild'); if(document.selection) { selection = document.selection.createRange().text; } else { selection = ta.value.substring(ta.selectionStart, ta.selectionEnd); } ta.focus(); ta.value=ta.value.replace(new RegExp(selection, ''), '['+bb+']'+selection+'[/'+bb+']'); ta.blur(); }[/js]
ООО Спасибо ОГРОМНОЕ!!! =) Работает!!! опс =) ещё одна проблемка почему-то не заменяет текст вида [ b]123[/b],тоесть если я ещё раз хочу поместить текст с ББ тегами в другие,то ничего не происходит...совершенно хз почему так...
ужс...мне начинает казаться что replace() не заменяет строку а добавляет в общий текст заменённую... Кстати есть ещё проблемка если например у меня в тексте 2 одинакодвых слова то заменяется первое вхождение независимо от того выделенно оно или нет... ЗЫ. JS меня с ума сведёт...я с пхп столько не сидел =(
Главное - не паниковать Обо всем по-порядку: Свойство text объекта, который возвращает createRange() можно не только читать, но и записывать - следовательно, чтобы избежать замены "не того" куска текста отказываемся от регулярок и делаем так: [js]document.selection.createRange().text = '['+bb+']'+document.selection.createRange().text+'[/'+bb+']';[/js] Но это только для IE. Для остальных браузеров вспоминаем про selectionStart/selectionEnd. Код приводить не буду, но обрисую логику. Есть текст: Код (Text): [............] Выделение: Код (Text): [...selectionStart...selectionEnd...] В итоге нам нужно получить: Код (Text): [0...[bb]selectionStart...selectionEnd[/bb]...length-1] Дальше думайте сами
Ещё раз вам спасибо! =) Заработало! Кстати у меня в Опере работает и document.selection.createRange().text ЗЫ. хм..вобще мне кажется что яваскрипт как ни странно сложнее пхп...я вот уже сколько времени с ним сижу а всё на стадии alert() 0_o мб конечно просто инфы по JS не так много как по пхп...