Выбор элемента таблицы данных объекта JSON для вывода списка всех его элементов

0

Я работаю над чем-то, что немного над моей головой, и я не могу найти какие-либо библиотеки, которые относятся к этому. В веб-приложении, над которым я работаю, у меня есть список русских людей, и при нажатии на имя человека будет создан список из n статей, написанных этим человеком. Я пытаюсь выполнить это с помощью JavaScript и JSON.

Вот как будут структурированы мои данные JSON:

var people = {
    'clients': [
        {
            'fname': 'joe',
            'lname': 'smith',
            'AFD': [
                {
                    'articleName': 'AFDArticle1byjoe'
                },
                {
                    'articleName': 'AFDArticle2byjoe'
                },
                {
                    'articleName': 'AFDArticle3byjoe'
                },
                {
                    'articleName': 'AFDArticle4byjoe'
                },
                {
                    'articleName': 'AFDArticle5byjoe'
                }
            ]
        },
        {
            'fname': 'jim',
            'lname': 'Hoff',
            'AFD': [
                {
                    'articleName': 'AFDArticle12byjim'
                }
            ]
        },
        {
            'fname': 'rick',
            'lname': 'Robinson',
            'AFD': [
                {
                    'articleName': 'AFDArticle5byrick'
                }
            ]
        },
        {
            'fname': 'sarah',
            'lname': 'Ross',
            'AFD': [
                {
                    'articleName': 'AFDArticle20bysarah'
                }
            ]
        },
        {
            'fname': 'jack',
            'lname': 'jones',
            'AFD': [
                {
                    'articleName': 'AFDArticle9byjack'
                }
            ]
        }
    ]
};

У каждого есть имя, фамилия и список n статей AFD.

Этот код будет хорошо перечислять количество n людей в таблице HTML из приведенного выше примера JSON:

<table border="1">
<script>
for (var i=0;i<people.clients.length;i++)
{

    $("#tabX").append("<tr><td>"+people.clients[i].fname+"</td></tr>");

}
</script>
</table>

и поэтому я получу хороший вывод из первых имен в таблице, например: "joe jim rick sarah jack"

И поэтому, щелкнув "joe", будет создана таблица данных статей Joe. Я уже могу это сделать так:

<table border="1">
<script>
    for (var i=0;i<people.clients.length;i++)
    {
        $("#tabX").append("<tr><td>"+people.clients[ selectedClient ].AFD[i].articleName+"</td></tr>");
    }
</script>
</table>

Если "selectedClient" является выбранным клиентом, статьи AFD будут генерироваться так: AFD Article 1 by joe,..., AFD Article 4 by joe.

Итак, наконец! У меня есть некоторые вопросы, которые действительно помогут мне пройти через это. Как я могу изменить значение selectedClient после нажатия на имя кого-то? Возможно ли это сделать, выполнив функцию, как показано ниже?

$("#tabX").append("<tr><td><a href="javascript:selectName();">" +people.clients[i].fname+ "</a></td></tr>");
Теги:

2 ответа

1
Лучший ответ

Я думаю, что ты на правильном пути. Может быть, что-то вроде этого поможет:

$("#tabX").append("<tr><td><a href=\"javascript:;\" onclick=\"javascript:selectName("+i+");\">" +people.clients[i].fname+ "</a></td></tr>");

и тогда это будет ваша функция selectName:

function selectName (idx)
{
  selectedClient = idx;
}
  • 0
    Возможно, вы могли бы сделать этот код более лаконичным, создав DOM-узлы в Javascript и добавив туда обработчики событий перед выводом его на страницу.
  • 0
    Что означает код var node = document.getElementById('tabA'); while (node.hasChildNodes()) { node.removeChild(node.lastChild); } Сделайте именно в jfiddle, который вы предоставили? Я пытаюсь понять это, так как теперь мне нужно добавить возможность заполнять DOM после выбора одной из статей KCS от любого из людей.
Показать ещё 1 комментарий
0

Вот как я к этому подхожу.

Я предполагаю следующий HTML:

<table id="people"></table>
<div id="articles"></div>

И следующий Javascript. forEach - IE9 и выше.

Поэтому для каждого человека в списке клиентов добавьте их в таблицу, указав идентификатор data для этого индекса клиента в объекте JS и включив имя класса.

people.clients.forEach(function(el, i) {
   $('#people').append('<tr><td data-id="' + i + '" class="name">' + el.fname + '</td></td>');
});

Затем, когда вы нажимаете на элемент с name класса имени, выбираете идентификатор из атрибута data, перебираете AFD для этого клиента, используя идентификатор, и добавляете их в div (или элемент по вашему выбору.). Это делает дальнейшее предположение о том, что между тем, как вы перечисляете своих клиентов, и вы начинаете нажимать на их имена, вы не сортируете объект people, иначе индексы (ids) будут полностью исключены.

$('.name').click(function() {
  var id = $(this).data('id');
  people.clients[id].AFD.forEach(function(el, i){
    $('#articles').append('<div>' + el.articleName + '</div>');
  });
});

JSfiddle

Ещё вопросы

Сообщество Overcoder
Наверх
Меню