Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: для новичков > Редактирование таблицы при помощи Jquery |
Автор: MagicPRO 29.11.2011, 17:03 |
Необходимо сделать форму с таблицей: размер можно менять отдельными командными ( добавить строку (в конце), удалить строку(текущую), добавить столбец(в конце)) сделать 2 клавиши добавление и удаление. первоначальный размер таблицы 2х2. Как лучше сделать, до этого вечно конфликт строки со столбцом был. |
Автор: Evghenusi 29.11.2011, 18:04 |
делал подобное на чистом JS, и конфликтов не было. можете его описать? |
Автор: MagicPRO 29.11.2011, 18:35 |
я сделал тоже на чистом яве...но сказали переделать на jquery.а я с ним не особо дружу. Может у кого есть примеры на Jquery, обшарил интернет подобного чето не нашел. |
Автор: $дмитрий 29.11.2011, 18:38 |
Для копировании строки достаточно посчитать количество td, затем в переменной сформировать всю строку и вставить результат, еще можно клонировать строку целиком и почистив содержимое td, вставить в таблицу Для копировании столбца просто вставляем последним элементом новый td по всех tr |
Автор: MagicPRO 29.11.2011, 18:53 |
а при удалении?? |
Автор: $дмитрий 29.11.2011, 19:01 | ||
Для удалении последней строки используй метод remove(), примерно так:
|
Автор: MagicPRO 2.12.2011, 00:58 | ||||
Сделал таблицу при помощи grid. Смог реализовать удаление/добавление строки только.
А вот собственно jquery
P.S. сказали убрать метод for(т.к. это древний метод)))) |
Автор: MagicPRO 8.12.2011, 00:26 |
Вот пытался построить при помощи этого http://jsfiddle.net/X67jK/ но ничего не получается,подскажите в чем ошибка(( |
Автор: $дмитрий 8.12.2011, 09:56 | ||||
Как минимум в этой записи
|
Автор: MagicPRO 9.12.2011, 00:44 |
Пардон, пост писал под шафэ).....в общем проведённый день прошел не зря! Перечитал кучу инфы по jQuery. И вот что получилось http://jsfiddle.net/hSuWr/16/ ! Осталось 2 нерешенные задачи: 1 - Удаление столбца и 2 - Добавление строки длиною всей таблицы(в зависимости от количества столбцов) |
Автор: $дмитрий 9.12.2011, 05:46 | ||||
Вместо
Правильнее
|
Автор: MagicPRO 10.12.2011, 19:58 |
Со строкой разобрался, а как удалить столбцы((((( |
Автор: $дмитрий 11.12.2011, 07:38 | ||||
С помощью each перебрать все tr, и применить на каждой итерации
|
Автор: MagicPRO 12.12.2011, 23:23 |
Метод удаление столбца, но все равно как-то удаляет криво! http://jsfiddle.net/magicpro/hSuWr/24/ |
Автор: $дмитрий 13.12.2011, 09:49 | ||
Перечитай внимательно что написал
Где цикл each? Не вижу |
Автор: MagicPRO 15.12.2011, 13:05 |
проблема с each, в паре нужно использовать цикл for, а мне нужно без for. как поступить?! |
Автор: $дмитрий 15.12.2011, 13:57 | ||
Покажи пример с кодом, где там проблема с циклом |
Автор: MagicPRO 16.12.2011, 02:20 |
Все получилось. each был заменен на clone. Может не самый лучший вариант, но на данную задачу пойдет! http://jsfiddle.net/magicpro/hSuWr/26/ Спасибо всем за помощь! |
Автор: MagicPRO 19.12.2011, 16:15 |
Теперь новая задача! Реализовать нужно что-то вроде excel'я. Чтоб удалить выбранный строку/столбец или добавить после выделенного строку/столбец. Я так понял нужно использовать chekbox с условиями, но возможно есть другие методы! |
Автор: ksnk 19.12.2011, 16:22 |
MagicPRO, Ищи плагин - "контекстное меню". Их дофига, если покопаться в плагинах jQuery. Вставить несколько строк в меню - удалить, добавить строку и т.д. Можно отдельное менюшко с кнопками использовать сверху таблицы. Соответственно, клик по строке "выделяет" её, кнопка "удалить" удаляет выделенное... Вообще - Excel - образец функциональности, привычной и интуитивно понятной простому народу. Если копировать внешность Excel - нужно скопировать и поведение? чтобы народ не вводился в недоумение... |
Автор: MagicPRO 27.12.2011, 23:57 |
У меня тут такая мысль пришла, вот только можно ли так. Если выделять ячейку при наведении и считывать её местонахождение(индекс), а затем идти при помощи правой кнопки -> контекстное меню -> добавить столбец,удалить столбец,удалить строку,добавить строку. |
Автор: ksnk 28.12.2011, 00:45 | ||
http://jsfiddle.net/QhL9E/ |
Автор: MagicPRO 28.12.2011, 21:01 | ||
ksnk, спасибо вам огромное, разобрал ваш пример! очень хороший метод! Кстати прописал его в html, стиль работает а jquery нет(
|
Автор: ksnk 28.12.2011, 22:41 | ||
MagicPRO, Для начала - нужно ТОЧНО скопировать css правила. Потом понять, зачем нужно 4 раза подгружать jQuery. Убрать лишние разы. Jacascript, который использует jQuery, как правило, вызывается при загрузке страницы. Для этого он заключается в такую конструкцию
|
Автор: MagicPRO 28.12.2011, 23:39 | ||
да получилось, расставил синтаксис и т.д., но одна функция странно работает добавляет столбец с активными ячейками но без границ, просто пустота но можно выделить ячейку.
|
Автор: ksnk 29.12.2011, 00:22 |
Что за функция, в каком броузере, как воспроизвести? В моем хроме все в порядке. |
Автор: MagicPRO 29.12.2011, 00:26 |
функция #addcell, в ИЕ 8 и мозиле одна и таже проблема, столбец добавляет но нет границ ячеек |
Автор: ksnk 29.12.2011, 01:14 | ||
содержимое не копируется. Тогда так:
|
Автор: MagicPRO 30.12.2011, 12:41 |
да..теперь работает. спасибо!!а вообще странный случай что не прорисовывает границы ячеек.... |
Автор: MagicPRO 3.1.2012, 15:52 |
а в этом случае можно добавить функцию ввода текста в ячейку? например .dblclick() или вместо выделения просто .click() что сохранились функции изменения таблицы? |
Автор: MagicPRO 4.1.2012, 10:48 |
Можно но вопрос как)).....прочитав документацию сделал вывод что это для каждой ячейки надо делать input text? |
Автор: MagicPRO 5.1.2012, 14:39 |
ksnk,этот фрагмент когда делает активную ячейку в связи с которой потом форматируется таблица, а если её оставить активной но добавить возможность вводить текст. $(function(){ $('#table').click(function(event){ var $cell=$(event.target).parents('td').andSelf().filter('td'); if( $cell.length>0){ $('#table td').removeClass('active'); $cell.addClass('active'); } |
Автор: MagicPRO 5.1.2012, 14:39 |
ksnk,этот фрагмент когда делает активную ячейку в связи с которой потом форматируется таблица, а если её оставить активной но добавить возможность вводить текст. $(function(){ $('#table').click(function(event){ var $cell=$(event.target).parents('td').andSelf().filter('td'); if( $cell.length>0){ $('#table td').removeClass('active'); $cell.addClass('active'); } |
Автор: ksnk 5.1.2012, 15:24 | ||
Ну и что мешает? Вверху - отдельное поле ввода, в которое при "активации" копируется содержимое ячейки, а при нажатии на ввод это содержимое вставляется обратно и обнуляется? Или каким-нибудь диалогом запрашиваем содержимое. Или просто инпут "подравниваем" до границ ячейки и абсолютным позиционированием размещаем над ячейкой. По onblur содержимое ячейки вбрасывается в ячейку. Что делалось и что не получается? |
Автор: MagicPRO 6.1.2012, 00:38 |
про onblur, впервые слышу, надо почитать. просто т.к. идея "аля" excel, то полей за пределами таблицы быть не должно. |
Автор: MagicPRO 12.1.2012, 21:31 |
ksnk, а можете сделать какие то наброски, как реализовать 3й вариант предложенный Вами. Я перечитал куча статей и никак не сведу мысли до кучи как это реализовать( |
Автор: ksnk 13.1.2012, 01:47 |
Выдернул из своего проекта редактор, немножко с корнями... Пришлось срочно дописывать комментарии и тестовую страничку. Как-то не планировалось оформлять его как посторонний плагин, но вроде не так уж и плохо выглядит. Если будут какие-то глюки - нужно докладывать. Проверялся на IE9 , хроме и FF. P.S. сейчас работает и на IE6-9 |
Автор: MagicPRO 15.1.2012, 13:45 |
спасибо за материал, только не работают стрелки почему то( п.с. все таки как добавить возможность вводить текст к тому примеру что Вы писали с активной ячейкой |
Автор: ksnk 15.1.2012, 19:42 |
На моей тестовой страничке работают? В самой нижней таблице? Где и как не работают? |
Автор: MagicPRO 15.1.2012, 23:23 |
все заработал.....у меня есть идея попробую реализовать под свой код! а для чего нужен файл editcell.js? editcell.min.js - описывает редактирование? |
Автор: ksnk 16.1.2012, 08:33 |
editcell.min.js- сжатый YUCompressor'ом editcell.js |
Автор: MagicPRO 19.1.2012, 20:18 |
Исходя из кода который был, нужно было дописать. Библиотечку "editcell" заброковали. Пришлось использовать textarea и получился вот такой вариант http://jsfiddle.net/QhL9E/17/, но теперь нужно без кнопок. Тоесть кликаешь на ячейку вводишь текст, кликаешь на другую он сохраняется. С вводом легко, можно убрать кнопку и сделать событие просто по click, а как прописать чтоб автоматически сохранялось? |
Автор: ksnk 19.1.2012, 20:29 |
По какой причине забраковали библиотеку? |
Автор: MagicPRO 19.1.2012, 23:25 |
библиотекой довольный, но нужен модернизированый этот код что у меня( |
Автор: ksnk 20.1.2012, 00:26 |
Ну, флаг в руки. Все правильные буквы уже написаны ![]() |
Автор: MagicPRO 26.1.2012, 21:51 |
ksnk, все таки мне понравился ваш пример разобрал и буду испльзовать его дальше, но возникла маленькая проблемка с textarea, при ожидании ввода текста перекрывает границу ячейки. |