Показать сообщение отдельно
  #5 (permalink)  
Старый 16.02.2010, 12:23
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Ну вот вам пример, по-моему первый плагин, который я написал,
Он, конечно, ужасен, и работает только в FF (переделывать щас лень) ))))))))), но в нем есть динамическое добавление элементов.


плагин

//Плагин работает так, как я хотел, но есть несколько багов
//1 не работает в IE (нехороший баг)
//2? по поводу простановк ttd.css({width:text.outerWidth()}); - нехороший но никак не влияющий
//3 выпадение из тела таблицы в дальшнейшем
(function($) {
    $.fn.spisok = function(options) {

        var defaults = {editColor: '#87CEEB',
                     deleteColor: '#87CEEB',
                     mainButtonColor: '#4682B4',
                     mainColor: '#87CEEB',
                     color:["#87CEEB","#D2691E","#8B008B","#008000"],
                     colorBut: true
    };
    var settings = $.extend(defaults, options);        
        this.each(function(){
            var text = $('<input type = "text">');
            var ttd = $('<td></td>');            
            $(this).after(text);
            $(this).css({background:settings.mainColor});
            ttd.css({width:text.outerWidth()});
            var ttr = $('<tr class="addition"></tr>');
            ttr.append(ttd);
            $(this).wrap(ttr).after(text);
            //ttd.css({width:text.outerWidth()});
            text.show();
            text.hide();
            var td = $('<td></td>');
            var td1 = $('<td></td>');
            var editList = $('<button>edit</button>');
            var deleteList = $('<button class="pointer">delete</button>');            
            td.append(editList);
            td1.append(deleteList);            
            text.parent().after(td);
            td.after(td1);
            globalWidth = text.outerWidth();
            editList.css({width:deleteList.outerWidth()});
            editList.css({background:settings.editColor});
            deleteList.css({background:settings.deleteColor});
            var current = this;
            editList.click(function(){
                if (editList.text() == 'edit') {
                    editList.text('confirm');
                    $(current).hide();
                    text.show();
                    text.val($(current).text());
                }
                else {
                    editList.text('edit');
                    text.hide();
                    $(current).text(text.val());
                    $(current).show();
                }
            })
            deleteList.click(function(){
                $(current).parent().parent().remove();
            })
            text.keydown(function(e){
                switch(e.keyCode) {
                case 13:
                    text.hide();
                    $(current).text(text.val());
                    $(current).show();
                    editList.text('edit');
                }
            })
        })
        $('tr.addition').wrapAll('<table></table>');
        var mainButton = $('<button>New List Item</button>');
        mainButton.css({background:settings.mainButtonColor});
        $('tbody').append(mainButton);
        var colorButton = $('<button>Color</button>');
        colorButton.css({background:settings.mainColor})
        var trButton = $("<tr class='addition'></tr>");
        mainButton.wrap(trButton);
        trButton.append(colorButton);
        if(settings.colorBut)
        mainButton.after(colorButton);            
          colorButton.click(function(){
              for (var i = 0; i < settings.color.length; i++) {
                if (settings.mainColor == settings.color[i]) {
                    if (i == (settings.color.length - 1))
                        settings.mainColor = settings.color[0]
                    else
                    settings.mainColor = settings.color[i + 1];
                break;
                }
              }
              colorButton.css({background:settings.mainColor});
            })
        mainButton.click(function () {
            var tr = $('<tr class="addition"></tr>');
            var ttd = $('<td></td>');
            ttd.css({width:globalWidth});
            var li = $('<li>New List Item</li>');
            li.css({background:settings.mainColor});
            ttd.append(li);
            tr.append(ttd);
            var text = $('<input type = "text">');
            var editList = $('<button>edit</button>');
            var deleteList = $('<button class="pointer">delete</button>');
            editList.css({background:settings.editColor});
            deleteList.css({background:settings.deleteColor});            
            if($('*').is('.pointer'))
            $('.pointer:last').parent().parent().after(tr);
            else {
                mainButton.parent().before(li.parent().parent());
            }
            li.after(text);            
            text.hide();
            var td = $('<td></td>');
            var td1 = $('<td></td>');
            td.append(editList);
            td1.append(deleteList);
            text.parent().after(td);
            td.after(td1);
            editList.css({width:deleteList.outerWidth()});
            editList.click(function(){
                if (editList.text() == 'edit') {
                    editList.text('confirm');
                    li.hide();
                    text.show();
                    text.val(li.text());
                }
                else {
                    editList.text('edit');
                    text.hide();
                    li.text(text.val());
                    li.show();
                }
            })
            deleteList.click(function(){
                tr.remove();              
            })//!!?          
            text.keydown(function(e){
                switch(e.keyCode) {
                case 13:
                    text.hide();
                    li.text(text.val());
                    li.show();
                    editList.text('edit');
                }
            })
        })
    }
})(jQuery);


Пример использования

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <script type="text/javascript" src="jquery-1.3.2.js"></script>
        <script type="text/javascript" src="jquery.spisok_1.js"></script>
        </head>

<script>
    $(document).ready(function(){
       $('.editable').spisok();              
    });
</script>
    <body>
    <li class="editable" >FIRST</li>
    <li class="editable">SECOND</li>
    <li class = "editable">THIRD</li>   
       </body>
</html>
Ответить с цитированием