Приветствую всех,
Я делаю BB Code Parser, но я застрял на фронте JavaScript. Я использую jQuery и библиотеку вставок для того, чтобы отметить выбор в текстовом поле. Когда кто-то выбирает фрагмент текста, появляется div с параметрами форматирования.
У меня есть две проблемы.
Выпуск 1. Как я могу сделать это для нескольких текстовых полей? Я рисую пробел, так как в настоящее время он будет правильно определять текстовое поле, пока оно не введет
$("#BBtoolBox a").mousedown(function() { }
петля. После ввода он начнет перечислять одно поле за другим случайным образом в моих глазах.
!!! ОСНОВНОЙ выпуск 2. Я полагаю, что это главная причина и для выпуск 1 . Когда я нажимаю параметр форматирования, он будет работать с первым действием, но не с последующим. Он продолжает дублировать переменную parsed . (если я оставлю только одно поле, оно никогда не будет напечатано во втором)
Выпуск 3 Если вы обнаружите в коде что-то особенно уродливое, расскажите, пожалуйста, как себя улучшить.
Я ценю любую помощь, которую могу получить. Заранее спасибо
$(document).ready(function() {
BBCP();
});
function BBCP(el) {
if(!el) { el = "textarea"; }
// Stores the cursor position of selection start
$(el).mousedown(function(e) {
coordX = e.pageX;
coordY = e.pageY;
// Event of selection finish by using keyboard
}).keyup(function() {
BBtoolBox(this, coordX, coordY);
// Event of selection finish by using mouse
}).mouseup(function() {
BBtoolBox(this, coordX, coordY);
// Event of field unfocus
}).blur(function() {
$("#BBtoolBox").hide();
});
}
function BBtoolBox(el, coordX, coordY) {
// Variable containing the selected text by Caret
selection = $(el).caret().text;
// Ignore the request if no text is selected
if(selection.length == 0) {
$("#BBtoolBox").hide();
return;
}
// Print the toolbox
if(!document.getElementById("BBtoolBox")) {
$(el).before("<div id=\"BBtoolBox\" style=\"left: "+ ( coordX + 5 ) +"px; top: "+ ( coordY - 30 ) +"px;\"></div>");
// List of actions
$("#BBtoolBox").append("<a href=\"#\" onclick=\"return false\"><img src=\"./icons/text_bold.png\" alt=\"B\" title=\"Bold\" /></a>");
$("#BBtoolBox").append("<a href=\"#\" onclick=\"return false\"><img src=\"./icons/text_italic.png\" alt=\"I\" title=\"Italic\" /></a>");
} else {
$("#BBtoolBox").css({'left': (coordX + 3) +'px', 'top': (coordY - 30) +'px'}).show();
}
// Parse the text according to the action requsted
$("#BBtoolBox a").mousedown(function() {
switch($(this).children(":first").attr("alt"))
{
case "B": // bold
parsed = "[b]"+ selection +"[/b]";
break;
case "I": // italic
parsed = "[i]"+ selection +"[/i]";
break;
}
// Changes the field value by replacing the selection with the variable parsed
$(el).val($(el).caret().replace(parsed));
$("#BBtoolBox").hide();
return false;
});
}