Подтвердить что ты не робот

Как представить дерево в таблице HTML?

Я пытаюсь показать древовидную структуру в таблице HTML. Это в основном список людей, которых вы ссылались на сайт, но вы можете расширять их и видеть людей, которых они называли (только 2 или 3 уровня). Я также показываю несколько фрагментов информации для каждого человека, поэтому я использую таблицу с несколькими столбцами.

Мне интересно, какой лучший способ отобразить это, чтобы люди на более низких уровнях выглядели "отступом", но избегая несоответствия между содержимым данных и заголовками, показывающими, что означает каждый номер...

В основном я ищу воровство идей:-) Вы когда-нибудь видели или делали сайт, который имеет что-то вроде этого?


Изменить: Спасибо за все ответы.

Я думаю, что не смог правильно объяснить, что я пытаюсь сделать. Это список людей, но причиной существования этого отчета являются числа, привязанные к каждому человеку, а не самому списку.
Для каждого человека в этом "списке" я собираюсь показать данные справа, которые должны быть выровнены, например, чтобы иметь "итоговые значения" внизу и т.д.

Изображение, если хотите, с проводником Windows с деревом слева, чтобы вы могли открывать и закрывать папки, но затем, справа от каждой папки, у вас есть данные, например, сколько файлов там, что вид информации и т.д. Так же, как вы попадаете в правую панель в Проводнике Windows для "файлов" (в виде "Детали" ), только то, что я делаю это для дерева слева. (Это не то, что я делаю, но это ближайшая аналогия, о которой я мог подумать)

Вот почему я склоняюсь к созданию таблицы, а не к списку. Если они только имена людей или дерево папок, я полностью согласен с тем, что nesting <ul> это путь. Моя проблема в этом случае заключается в том, что дополнительные данные, которые мне нужно показать для каждого элемента, являются самой важной частью всего отчета.

4b9b3361

Ответ 1

У меня нет ответа, но у меня есть иллюстрация для тех, у кого проблемы с визуализацией необходимости OP.

Unix QPS (менеджер визуальных процессов) в Tree View показывает только такое дерево/таблицу.

Поиск изображений Google находит несколько образцов изображений.

Лично мне хотелось бы знать, как реализовать это в браузере.

Изменить: добавлен образец изображения:

alt text http://www.student.nada.kth.se/~f91-men/qps/tree.png

Редактирование: Неверная реализация

<!doctype html public "-//w3c//dtd xhtml 1.0 strict//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd">
<html>
    <head>
        <style>
            .removed
            {
                display:none;
            }

            .expands
            {
                cursor:pointer; cursor:hand;
            }

            .child1 td:first-child
            {
                padding-left: 1em;
            }

            .child2 td:first-child
            {
                padding-left: 2em;
            }
        </style>
        <script>
            function toggle()
            {
                for(var i=0; i<arguments.length; i++)
                {
                    with(document.getElementById(arguments[i]))
                    {
                        if(className.indexOf('removed') > -1)
                        {
                            className = className.replace('removed');
                        }
                        else
                        {
                            className += ' removed';
                        }
                    }
                }
            }
        </script>
    </head>
    <body>
    <table>
        <thead>
            <tr>
                <th>Person</th>
                <th>Prop 1</th>
                <th>Prop 2</th>
                <th>Prop 3</th>
            </tr>
        </thead>
        <tbody>
            <tr id="p1" class="expands" onclick="toggle('p2','p3')">
                <td>P1</td>
                <td>a</td>
                <td>b</td>
                <td>c</td>
            </tr>
            <tr id="p2" class="removed child1">
                <td>P2</td>
                <td>a</td>
                <td>b</td>
                <td>c</td>
            </tr>
            <tr id="p3" class="removed child2">
                <td>P3</td>
                <td>a</td>
                <td>b</td>
                <td>c</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td>Totals:</td>
                <td>x</td>
                <td>y</td>
                <td>z</td>
            </tr>
        </tfoot>
    </table>
    </body>
</html>

Ответ 2

Используйте семантически соответствующий тег для списков: <ul>. просто гнезди их. вы можете скрыть часть структуры или создать ее на лету.

<ul id='n0>
  <li id='n1'>One guy</li>
  <li id='n2'>Second guy
    <ul id='n2.0'>
      <li id='n2.1'>first one of second guy</li>
      <li id='n2.2'>last of second</li>
    </ul>
  </li>
  <li id='n3'>Third one</li>
</ul>

и т.д. Именование элементов зависит от вас, я обычно делаю это, либо отражаю struture (как здесь), либо идентификаторы базы данных.

Ответ 3

Имена такого макета:

  • tree grid/treegrid (например: Ajax)
  • просмотр списка дерева /treelistview (например: Microsoft.Net)
  • древовидная модель /treemodel (например: Qt Framework)

Поиски на "treegrid" и "tree grid html5", по-видимому, дают наилучшие результаты для html-реализаций.

Ответ 4

... Это в основном список людей...

У вас нет - это не табличные данные, это список (<ul>)

Ответ 5

Мы используем кучу DIV для отображения подобной структуры. Нечетные (1-я позиция, 3-е, 5-е и т.д.) Имеют таблицу с одной строкой внутри, даже одни (2-й, 4-й и т.д.) Первоначально CSS'ed "display: none". Первая ячейка каждой таблицы содержит ссылку, которая запускает DIV под ней для заполнения данными, которые возвращаются с сервера через вызов AJAX. Данные, которые возвращаются, могут иметь ту же структуру, что и материал первого уровня (несколько "расширяемых" строк), или просто "Сведения" о соответствующей записи. Ничего не смыслового, но он выглядит так, как хочет клиент, и он работает. Вот скриншоты:

Исходный список перед расширением: alt text http://img26.imageshack.us/img26/5986/28656041.png

После нажатия последней ссылки (70036720): alt text http://img15.imageshack.us/img15/7455/40596280.png

После нажатия ссылки на втором уровне (70036720-1): alt text http://img197.imageshack.us/img197/4588/37964248.png

Ответ 6

Я бы попробовал что-то, используя вложенные div s. Я думаю, было бы довольно сложно, если бы он выглядел как одна большая таблица с заголовками столбцов только сверху, поэтому вам может быть лучше рассмотреть новую таблицу для каждого уровня вложенности или развернуть ее, чтобы вы отображали данные в виде строк а не столбцы.

Ответ 7

Конечно, таблица - неправильный инструмент для использования, я думаю. Обычно деревья определяются как список поддеревьев (плюс потенциально некоторые данные), и поэтому я думаю, что семантическое преобразование в html должно использовать некоторые вложенные списки (и если вы хотите, чтобы там была динамичность, убедитесь, что вы сохранили все списки открыть и ЗАКРЫТЬ их с помощью javascript, поэтому они открыты, если у пользователя отключен javascript).

Фактически, вы также сказали, что у вас есть СПИСОК людей, которые обратились к сайту, поэтому он выглядит намного больше, чем список, чем таблица.

Кроме того, вложенные списки можно легко отформатировать с помощью CSS, чтобы выглядеть довольно красиво. По крайней мере, попытка сделать такой вложенный список выглядит хорошо, гораздо меньше, чем пытаться заставить таблицу выглядеть так красиво (я пробовал оба).

В целом: используйте вложенный список. Он подходит для структуры данных, которую вы представляете лучше, а также лучше подходит для вашей интуиции, а также легче отформатировать ее легче.

Ответ 8

Итак, у вас есть списки людей и групп людей. Расположите это как вложенные списки.

Затем у вас есть табличная информация о каждом человеке. Представьте это как серию таблиц.

Затем свяжите людей со столом. Это можно сделать с помощью <a href="#table_about_person_a"> и <table id="table_about_person_a">

Если JavaScript включен, загрузите таблицу стилей, которая устанавливает все отображаемые таблицы: none;

Прикрепите обработчики событий к каждой ссылке в списке, которые читают href, чтобы получить идентификатор таблицы, связанной с этим пользователем. Установите JS для отображения таблицы: table (или block in IE <= 7).

Из-за проблем с Internet Explorer это лучше всего сделать, назначив класс всем таблицам, чтобы скрыть их, а затем удалите их, чтобы их открыть.

Затем добавьте CSS, чтобы расположить таблицы рядом с списком.

Без JS он должен деградировать, чтобы щелкнуть имя, чтобы прокрутить браузер к связанной с ним таблице.

Ответ 9

Daniel, чтобы получить древовидную структуру, такую ​​как иерархия папок в проводнике Windows, вам понадобятся таблицы, divs, изображения (чтобы иметь возможность развернуть сбой) и т.д. Ваши div должны быть созданы автоматически или инкрементными идентификаторами. Если вы нажимаете на значок разворачивания/свернуть, ваша видимость div должна быть заблокирована или отсутствовать. Это должно быть сделано в javascript.

Я сделал аналогичную вещь, где мои данные были в формате xml, содержащем деления, проекты внутри подразделений, ресурсы в рамках проектов и т.д. Я применил xslt для генерации вывода reqd html для древовидной структуры. Дайте мне знать, если ваш req тот же. Так что я могу отправить вам образец xml, xslt.

Ответ 10

Просто преобразуйте структуру данных дерева в один размерный массив с отношением между дочерним и родительским, а затем используйте этот 1-D массив, чтобы отображать ваши данные в таблице.