Пытаюсь сделать самый простой редактор бб-кода, без использования увесистых библиотек. Типа того, что используется на этом форуме. Кнопками у меня служат картинки вида: <img src="blabla" alt="b">
А функция вызывается по клику:
$('.portal-bbcodes img:not(.smilies)').click(function() {
var textArea = $('.portal-bbcodes + textarea');
var n = $(this).attr('alt');
insertTag(textArea, '['+n+']', '[/'+n+']');
});
Нашёл идеально работающую штуку в виде плагина (в архиве есть демо):
http://code.google.com/p/jquery-bbedit/downloads/list
Короче, я решил вытащить из него самую суть и немного "оприходовать" входящие данные, чтобы упростить по максимуму и заставить работать с моими кнопками:
function insertTag(ta, tag, tag2) { //изменено: data на ta
var val, startPos, endPos;
var range = document.selection.createRange(); //изменено: data.range на document.selection.createRange();
var text = '';
var highlight = false; //добавлено
if (range != null) {
text = range.text;
} else if (typeof ta.selectionStart != 'undefined') {
startPos = ta.selectionStart;
endPos = ta.selectionEnd;
text = ta.value.substring(startPos, endPos);
}
if (typeof tag == 'function' || typeof tag == 'object') {
val = tag(text);
if (val === false) {
if (range != null) {
range.moveStart('character', text.length);
range.select();
} else if (typeof ta.selectionStart != 'undefined') {
ta.selectionStart = startPos + text.length;
}
ta.focus();
return;
}
} else {
if (!tag2 || tag2 == '') {
val = text + tag;
} else {
val = tag + text + tag2;
}
}
if (range != null) {
range.text = val;
if (highlight) { // изменено: data.highlight на highlight
range.moveStart('character', - val.length);
} else {
range.moveStart('character', 0);
}
range.select();
} else if (typeof ta.selectionStart != 'undefined') {
ta.value = ta.value.substring(0, startPos) + val + ta.value.substr(endPos);
if (highlight) { // изменено: data.highlight на highlight
ta.selectionStart = startPos;
ta.selectionEnd = startPos + val.length;
} else {
ta.selectionStart = startPos + val.length;
ta.selectionEnd = startPos + val.length;
}
} else {
ta.value += val;
}
ta.focus();
}
Проблема в том, что функция не работает, и я не пойму почему. Она ведь прекрасно работает в плагине и ошибок при изменении я вроде не допустил, поэтому я сейчас просто в ступоре... Я уже пробовал сувать её и в (function ($) { })(jQuery); и в $(document).ready(function() { }); - безрезультатно. С моей стороны тут наверняка допущена какая-то наитупейшая ошибка, которую я просто не вижу в силу неопытности. Прошу помощи. =\