![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Styler |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 24.7.2005 Репутация: нет Всего: 1 |
Есть небольшая проблема.
Существует некая таблица, создаваемая пользователем. Выглядит она допустим так:
Каким образом мне средствами JS корректно изменить в первой строке этой таблицы теги на заголовочные <th> ? Пока что придумал только такую схему: - добавить строку с ячейками выше первой - скопировать туда все данные с бывшей первой строки - удалить бывшую первую строку Нет ли подхода попроще? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Напрашивается поиграться с innerHTML первой строки. Заменить там все td на th... регуляркой - примерно так xxx.replace(/<(\/?)td(.*?)>/g,'<$1th$2>') Добавлено через 1 минуту Правда возможны непредсказуемые глюки для разных броузеров - нужна серьзная проверка.... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Styler |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 24.7.2005 Репутация: нет Всего: 1 |
А как можно определить, сколько <td> в первой строке, средствами JS ?
|
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 8 Всего: 22 |
А куда еще проще? Создание сроки типа th; добавление в цикле количества ячеек с параметрами, атрибутами и стилями; заменить первую строку на созданную - итого меньше 10 строк кода. Зато работает везде, очень кошерно и грамотно с точки зрения подхода. И однозначно быстрее, чем работа с innerHTML. Это сообщение отредактировал(а) IDVsbruck - 4.11.2008, 02:40 |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
В IE (актуальных) не пройдет... Быстрее - имхо, вряд ли... А вообще, надо ли вставлять/грохать целую строку? Чем недостаточно чего-то вроде
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
А зечем вообще что-то менять в дереве? В чем принципиальная разница td и th? Только в отображении? Тогда почему просто не добавить класс к нужным td
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 8 Всего: 22 |
Ну, моральные аспекты - почему да зачем не обсуждалось - человек спросил не как лучше подсветить первую строку, а как заменить. Вот и меняем ...
![]() SelenIT, надо аккуратнее с ссылками, потому что сам же не очень красиво смотришься ... да, циферки симпатичные, знаю и видел. Однако посмотрел, к чему это относится? - "generating large amounts of content". А тут мы о чем говорим? - О том, чтобы взять контент из innerHTML и парсить в поисках определенных тегов, потом менять, а потом уже вставлять, причем потом будет заново вставляться вся таблица. Данная ссылка относится только к последнему пункту - тут нет спора, innerHTML будет быстрее, но вот прокол в том, что ДОМом мы не вставляем "large amounts of content", а только заменяем первую строку. Кстати, мало что в javascript работает так медленно, как парсинг ... По-прежнему считаю объектную замену строки (не каждой ячейки отдельно, а только всей строки) наиболее правильным и быстрым способом. |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Говорят, в семантике. Если чисто для визуальных целей, то конечно - достаточно класс у TR поменять да наследование стилей применить... IDVsbruck, спасибо за дельное замечание! Действительно, ссылку я кинул механически, чести это мне не делает. С идеологической точки зрения - согласен полностью, искать что-то в сериализованной разметке - надругательство над логикой DOM. С точки зрения "нанооптимизации"... помню, что регулярки в IE работают неприлично шустро, тогда как DOM-методы ощутимо тормозят, чуть позже попробую протестить (в Опере сразу ясно, что регулярки проиграют). В любом случае согласен, что в обычной практике юзать innerHTML + replace не стоит;).
Вот это прошу раскрыть поподробнее - лично мне преимущество не очевидно. Ведь от того, чтобы копировать содержимое старых ячеек в новые поштучно с последующим append-ом их в новую строку, по-моему, никуда не деться, зато добавляется создание еще одного элемента... дело в минимизации кол-ва replaceElement-ов или я не понимаю чего-то совсем очевидного? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 8 Всего: 22 |
С удовольствием объясню
![]() Когда мы формируем объект-строку, добавляя в нее ячейки и их содержимое, мы не затрагиваем структуры документа. И перерендерим его только один раз - когда идет подмена строк. Если же вставить строку, затем вставлять каждую ячейку отдельно, то рендеринг всей страницы будет при каждом (!!!) изменении параметра или атрибута ячейки или строки. Вот и посчитай, насколько для страницы и ДОМ-модели будет трудоемче пошагово вставлять ячейки. |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Семантика добавляется с помошью js на клиенте? ![]() IDVsbruck, а есть возможность каким-то образом сказать, что сейчас дерево в процессе изменения и не стоит его перерисовывать? -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 8 Всего: 22 |
Думаю, нет. Все-таки модель с представлением достаточно сложно увязать, а чтобы этим еще и управлять - думаю, так далеко браузеры не пойдут ...
Хотя утверждать не буду - просто наблюдения и логический вывод. |
|||
|
||||
Styler |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 24.7.2005 Репутация: нет Всего: 1 |
Отличная дискуссия - почерпнул для себя новое из нее
![]() Раз уж пошло такое обсуждение - может подскажете мне - как узнать - есть ли в таблице обьединенные ячейки - colspan и rowspan ? |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 9 Всего: 67 |
Styler, обойти все ячейки и проверить соответсвтуюшие свойства.
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
IDVsbruck |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 778 Регистрация: 12.11.2006 Репутация: 8 Всего: 22 |
jQuery рулит
|
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |