Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 15.10.19 15:43
Оценка:
В совершенно несвязной задаче вдруг возникла проблема связанная с объединением ячеек. После длительного изучения стало понятно, что очень многие генераторы таблиц и прочии библиотеки для работы с таблицами не справляются с такой казалось бы простой задачкой.

Вот например тут, я рисую табличку:
https://tabletag.net/

<table>
    <tbody>
        <tr>
            <td colspan="4" rowspan="3"></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>


Пока всё хорошо, но я хочу объединить в последних двух столбцах клетки со второй строки по четвёртую.
Хочется, чтобы выделенные клетки склеились.


Что даёт генератор:

<table>
    <tbody>
        <tr>
            <td colspan="4" rowspan="2"></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td colspan="2" rowspan="2"></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>


С одной стороны логично, но с другой Хром и Лиса показывают совсем не то, что нужно.


Это какая-то принципиальная невозможность отобразить подобное, глюк обозревателй или есть обходной путь?
Все будет Украина!
Отредактировано 15.10.2019 15:47 Ватакуси . Предыдущая версия . Еще …
Отредактировано 15.10.2019 15:46 Ватакуси . Предыдущая версия .
Re: Занятный вопрос про таблицу
От: amironov79  
Дата: 16.10.19 05:11
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>Это какая-то принципиальная невозможность отобразить подобное, глюк обозревателй или есть обходной путь?


Похоже на ограничение html, обходится таблицей в таблице.
Re: Занятный вопрос про таблицу
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.10.19 06:10
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>[/code]


В>С одной стороны логично, но с другой Хром и Лиса показывают совсем не то, что нужно.

В>[img]
В>http://files.rsdn.org/315/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%BA%D0%BB%D0%B5%D0%B9%D0%BA%D0%B8.PNG
В>[/img]

В>Это какая-то принципиальная невозможность отобразить подобное, глюк обозревателй или есть обходной путь?

Принципиальная невозможность правильно подсчитать количество строк в таблице.
Чтобы её обойти, добавьте колонку нулевой ширины, без бордюров и паддинга, в которой будут необъединённые ячейки.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 16.10.19 08:05
Оценка:
В>>Это какая-то принципиальная невозможность отобразить подобное, глюк обозревателй или есть обходной путь?
S>Принципиальная невозможность правильно подсчитать количество строк в таблице.
Почему? Там же явно указано четыре строки.

S>Чтобы её обойти, добавьте колонку нулевой ширины, без бордюров и паддинга, в которой будут необъединённые ячейки.

Дело в том, что нужно это делать для общего случая и автоматическом режиме.
Все будет Украина!
Re[2]: Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 16.10.19 08:06
Оценка:
В>>Это какая-то принципиальная невозможность отобразить подобное, глюк обозревателй или есть обходной путь?

A>Похоже на ограничение html, обходится таблицей в таблице.

Можно пример (на основе моего первого сообщения)?
Все будет Украина!
Re[3]: Занятный вопрос про таблицу
От: amironov79  
Дата: 16.10.19 10:44
Оценка:
Здравствуйте, Ватакуси, Вы писали:

A>>Похоже на ограничение html, обходится таблицей в таблице.

В>Можно пример (на основе моего первого сообщения)?

А нет, не подумал: у таблицы в таблице теже проблемы. Действительно, надо пробовать через дополнительную колонку нулевой ширины.
Re[3]: Занятный вопрос про таблицу
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.10.19 17:20
Оценка:
Здравствуйте, Ватакуси, Вы писали:
В>Почему? Там же явно указано четыре строки.
Все равно получается неопределённость. Я сам не автор браузеров, можно отловить тут коллегу c-smile, кто писал свой собственный рендерер. Может, он объяснит, в какой момент ломается раскладывалка ячеек.
S>>Чтобы её обойти, добавьте колонку нулевой ширины, без бордюров и паддинга, в которой будут необъединённые ячейки.
В>Дело в том, что нужно это делать для общего случая и автоматическом режиме.
Почему вы не можете сделать это в общем случае и автоматическом режиме?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 17.10.19 12:54
Оценка:
В>>Почему? Там же явно указано четыре строки.
S>Все равно получается неопределённость. Я сам не автор браузеров, можно отловить тут коллегу c-smile, кто писал свой собственный рендерер. Может, он объяснит, в какой момент ломается раскладывалка ячеек.
Да, когда таблица это не таблица, а список строк с произвольным кол-вом столбцов это сильно всё усложняет.

S>>>Чтобы её обойти, добавьте колонку нулевой ширины, без бордюров и паддинга, в которой будут необъединённые ячейки.

В>>Дело в том, что нужно это делать для общего случая и автоматическом режиме.
S>Почему вы не можете сделать это в общем случае и автоматическом режиме?
Наверное потому, что я не совсем понял вашу мысль. Вы можете на моём примере пояснить с исправленным кодом?
Все будет Украина!
Re[5]: Занятный вопрос про таблицу
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.10.19 14:53
Оценка: +1
Здравствуйте, Ватакуси, Вы писали:
S>>Почему вы не можете сделать это в общем случае и автоматическом режиме?
В>Наверное потому, что я не совсем понял вашу мысль. Вы можете на моём примере пояснить с исправленным кодом?
<table>
    <tbody>
        <tr>
            <td>.</td>
            <td colspan="4" rowspan="3"></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>.</td>
            <td colspan="2" rowspan="3"></td>
        </tr>
        <tr>
            <td>.</td>
        </tr>
        <tr>
            <td>.</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>.</td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>

слева добавлена одна "опорная" колонка, чтобы браузер понял, сколько строк и стобцов вам нужно.
Теперь её просто нужно спрятать средствами Css.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 24.10.19 06:07
Оценка:
S>слева добавлена одна "опорная" колонка, чтобы браузер понял, сколько строк и стобцов вам нужно.
S>Теперь её просто нужно спрятать средствами Css.

Спасибо. Я почти подобным образом сделал (не знаю на сколько это отличается от вашего варианта, правда).
Когда происходит слияние и нужно удалять ячейки, то делается как-то так:

                        if (cell.parentElement.cells.length == 1 || (cell.parentElement.cells.length == 2 && (cell.parentElement.cells[0] == this.curCell || cell.parentElement.cells[1] == this.curCell)))
                            cell.setAttribute("style", "visibility: hidden; padding: 1em 0; border: 0 none;");
                        else
                            cell.remove();


На моём первоначальном примере это работает. Но в отдельных случаях даёт странные эффекты.
Это то, что вы имели ввиду?
Все будет Украина!
Re[7]: Занятный вопрос про таблицу
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.10.19 10:19
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>На моём первоначальном примере это работает. Но в отдельных случаях даёт странные эффекты.

В>Это то, что вы имели ввиду?
Признаться, я не вполне понимаю, что делает ваш код
Как, впрочем, не вполне понимаю и вашу исходную задачу. Вы показали таблицу, которую не можете сверстать — я показал вам, как её сверстать.
Что у вас за динамика, я понять пока не могу.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Занятный вопрос про таблицу
От: Ватакуси Россия  
Дата: 25.10.19 09:58
Оценка:
В>>На моём первоначальном примере это работает. Но в отдельных случаях даёт странные эффекты.
В>>Это то, что вы имели ввиду?
S>Признаться, я не вполне понимаю, что делает ваш код
Он обрабатывает слияение ячеек (та часть, где они уже удаляются, а одна из них растягивается по столбцам и строкам).

S>Как, впрочем, не вполне понимаю и вашу исходную задачу. Вы показали таблицу, которую не можете сверстать — я показал вам, как её сверстать.

S>Что у вас за динамика, я понять пока не могу.
Наверное, если переформулировать — то при каких обстроятельствах (в общем случае) нужно вставлять эти невидимые ячейки?

В моём коде два варианта обрабатывается — когда строке одна ячейка и её нужно удалить. И когда в строке две ячейки, одна удаляется, а вторая растягивается.
Посколько я не понимаю ошибок обозревателей — почему они неправильно подсчитывают кол-во строк, то и не знаю покрывают ли два этих условия все случаи или нет?
Все будет Украина!
Re[9]: Занятный вопрос про таблицу
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.10.19 11:13
Оценка: +1
Здравствуйте, Ватакуси, Вы писали:

S>>Что у вас за динамика, я понять пока не могу.

В>Наверное, если переформулировать — то при каких обстроятельствах (в общем случае) нужно вставлять эти невидимые ячейки?
Как я понял, то при том обстоятельстве, когда в каком-то TR остаётся 0 TD.
Вы пишете дизайнер таблиц? Или вам нужно сверстать таблицу?
Если первое — просто добавляйте запасной столбец всегда.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.