Как взять выделенный текст из textarea?
К изучению JS приступил вчера. До этого уже несколько лет (4-5) писал на php. Как вы знаете, ООП там не особо широко используется. С - не знаю, так что не легко пока что приходится :)
Поставлена была задача - обогатить наворотами новостной модуль своей цмс (добавить возможность комментирования и т.д.). При помощи JS сделать добавление в форму постинга тегов а-ля ББкод. Т.е. выделяешь нужный отрезок текста, кликаешь кнопочку и он обрамляется парными тегами... при чем кросбраузерно... ну хотябы для ИЕ, Лисы и Оперы. Задача эта мне пока кажется не реальной :) Решил для начала хотябы получить выделенный отрезок текста и показать его алертом. Что имею: текстареа - <textarea id = "postarea" class = "text_area" rows = "5" cols = "120" name = "txt"></textarea> линк (потом сделаю красивее) - <a onClick = "javascript:tag_add(postarea, 'b', '/b')"><b>B</b></a> Что имеет меня: function tag_add(obj, str1, str2){ obj.focus(); if(document.selection) { var s = document.selection.createRange(); alert('---' + s.text + '---'); s.text = str1 + s.text + str2; } return false; } В алерте получаю "------". Т.е. s.text пустой получается? В чем я тут не прав, и если не сложно - как мне решить глобальную задачу (пример и развернутые камменты плз.)? :) p.s. А как в ИЕ баги отлавливать, в нем же JS консоли нет? |
Стоило только добавить аттрибут href в тег a, как все заработало. ИЕ6... В пятом кажется и без этого должно работать.
|
Функция получилась вот такая:
function tag_add(obj, str1, str2){ obj.focus(); // Для IE if(document.selection) { var s = document.selection.createRange(); if(s.text) { s.text = str1 + s.text + str2; } else { obj.value = obj.value + str1 + str2; } return true; } // Opera, FireFox else if (typeof(obj.selectionStart) == "number") { if (obj.selectionStart != obj.selectionEnd) { var start = obj.selectionStart; var end = obj.selectionEnd; s = obj.value.substr(start,end-start); obj.value = obj.value.substr(0, start) + str1 + s + str2 + obj.value.substr(end); } else { obj.value = obj.value + str1 + str2; } return true; } return false; }Работает, проверено. Всем спасибо за огромную помощь )) |
Неа
В IE8 не работает. (добавляет тег в конец текста)
|
Хм... благодарю за информацию.
Вообще со времен этого поста я уже заметно подтянул JS и ООП. Сейчас к примеру уже пишу кросбраузерное ajax приложение. Как будет время - поставлю ие8, поправлю функцию, и если не забуду то отпишусь. ;) |
fankiss,
В итоге забыл)))) |
Часовой пояс GMT +3, время: 11:45. |