Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   форматированный ввод (https://javascript.ru/forum/dom-window/9772-formatirovannyjj-vvod.html)

Geddar 05.06.2010 15:52

Создал пустой документ, поставил scr на него присвоил body id'шник и через innerHTML всё заработало, Спасибо

Geddar 05.06.2010 17:12

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

x-yuri 05.06.2010 18:44

Цитата:

Сообщение от bash
user
Здравствуйте
support
Добрый вечер.
user
форум на сайте не работает...
user
можно разобраться в чем проблема
support
Можно. Разбирайтесь.

http://bash.org.ru/quote/168627

Geddar 05.06.2010 19:09

(|||:) имхо
Если не знаешь или в лом ответить - лучше промолчать.

Geddar 05.06.2010 19:45

function nodeList(parentNode, list, level) {
    var i, node, count;
    if (!list) list = new Array();
    level++;
    for (i = 0; i < parentNode.childNodes.length; i++) {
        node = parentNode.childNodes[i];
        if (node.nodeType != 1) continue;
        count = list.length;
        list[count] = new Array();
        list[count][0] = node;
        list[count][1] = level;
        nodeList(node, list, level);
    }
    return list;
}
// rgbNormal - приводит цвет к стандарту #RRGGBB
function rgbNormal(color) {
    color = color.toString();
    var re = /rgb\((.*?)\)/i;
    if(re.test(color)) {
        compose = RegExp.$1.split(",");
        var hex = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
        var result = "#";
        for (var i = 0; i < compose.length; i++) {
            rgb = parseInt(compose[i]);
            result += hex[parseInt(rgb / 16)] + hex[rgb % 16];
        }
        return result;
    } else return color;
}
function execCommandImitation(start, end) {
    // Cтавим ForeColor-форматирование с помощью специального цвета
    doc.execCommand("ForeColor", false, "#f5F856");
    // Получаем все элементы форматируемого документа
    var allNodes = nodeList(doc.body, false, 0);
    // Сортируем их по уровню вложенности
    var maxLevel = 0;
    for (i = 0; i < allNodes.length; i++) {
        maxLevel = allNodes[i][1] > maxLevel ? allNodes[i][1] : maxLevel;
    }
    // 4. Для всех элементов заменяем FONT и SPAN со специальным цветом на переданный код
    var node, newnode, color, parent;
    for (j = maxLevel; j >= 1; j--) {
        for (i = 0; i < allNodes.length; i++) {
            if (allNodes[i][1] != j) continue;
            node = allNodes[i][0];
            sname = node.nodeName.toLowerCase();
            color = node.color ? rgbNormal(node.color) : rgbNormal(node.style.color);
            if (color) color = color.toLowerCase();
            if (sname == "font" || sname == "span" && color == "#f5f856") {
                try {
                    node.innerHTML = start + node.innerHTML + end;
                } catch(e) {}
                parent = node.parentNode;
                while (node.childNodes.length > 0) parent.insertBefore(node.firstChild, node);
                parent.removeChild(node);
            }
        }
    }
    ifr.focus();
}
</script>

<span onclick="execCommandImitation('<div align=\'right\'>','</div>')">Вправо</span>


Метод конечно не идеален, но принцип ясен. Используя execCommand выделяем каким-особенным цветом текст (или другим параметром) и потом меняем это на своё.
Недостаток - такое форматирование не обратимо

x-yuri 05.06.2010 19:48

2007 год... баян, конечно. Это ответ был. Но если ты не можешь проверить сам такую вещь, может лучше подождать с написанием WYSIWYG-редактора?
Да и просто, не обязательно сразу отвечать в тему. Почему было самому сначала не попробовать? Зачем повышать энтропию форума? Может стоит начать думать о других, почтовые ящики не резиновые ведь? ;)

upd: почему не обратимо?

Geddar 05.06.2010 20:16

Если через execCommand выделить, к примеру, жирный текст, то он станет обратно нормальным. Сдесь же такое не прокатит. И есть некоторые глюки.
"Почему было самому сначала не попробовать?" - иногда решение бывает простым, как с фреймами например, а поиски займут намного больше времени или без результатны.
И WYSIWYG-редактор нужен мне, причём своими руками, что б вставлять в теги необходимые данные и связать всё это с пхп через AJAX.

P.S. с точки зрения информатики энтропия - это мера неопределённости информации, с точки зрения физики - мера идеальности макросостояния. Конкретизируйте ;)

x-yuri 05.06.2010 20:26

Цитата:

Сообщение от Geddar
Если через execCommand выделить, к примеру, жирный текст, то он станет обратно нормальным.

чего он станет обратно нормальным? Можно отменить с помощью Ctrl-Z что ли?

Цитата:

Сообщение от Geddar
И WYSIWYG-редактор нужен мне, причём своими руками, что б вставлять в теги необходимые данные и связать всё это с пхп через AJAX

расскажи подробнее, может лучше выбрать другое решение

Geddar 05.06.2010 20:36

Повторное выделение жирным отменят предыдущее. Так же с отсальными свойствами и Ctrl-Z тоже.

Подробнее:Делаю тестовую оболочку. Пользователь-"создатель теста", должен смочь добавлять инпуты. Например несколько правильных ответов. Соответсвенно их нужно пронумеровать, будь это радио или чекбоксы. А правильный ответ будет храниться в базе. К тому же, прога должна сама определять тип вопроса. например если ответ один из нескольких - радио, несколько - чекбоксы, один, который нужно самому ввести - просто инпут-текст.


Часовой пояс GMT +3, время: 11:31.