Как лучше переписать этот JSON в данные jQuery ()? - PullRequest
1 голос
/ 14 декабря 2010

Почему-то у меня сегодня огромный пердеть.>. <</p>

У меня есть данные JSON, к которым я присоединяюсь с помощью jQuery .data (), который выглядит следующим образом:

$.getJSON("names.php", function(data) {
    //generate html string and append to DOM
    $.each(data, function(i,item) {
        var strHtml;
        strHtml += '<img src="' +item.PIC + '.jpg" id="' + item.ID  + '" />';
    })
    $('body').html(strHtml);

    //attach data to image ID
    $.each(data, function(i,item) {
        $('#' + item.ID).data(item.ID, {
            NAME: item.NAME,
            PHONE: item.PHONE,
            EMAIL: item.EMAIL,
            ADDRESS: item.ADDRESS,
            ...
            ...
            ...
        });
    }
}

Это отлично работает;однако, это выглядит немного некрасиво, и я пытаюсь немного это исправить, в основном в этой части:

    $.each(data, function(i,item) {
        $('#' + item.ID).data(item.ID, {
            NAME: item.NAME,
            PHONE: item.PHONE,
            EMAIL: item.EMAIL,
            ADDRESS: item.ADDRESS,
            ...
            ...
            ...
        });
    }

Я добавляю массив объекта к значению ключа.Пример из http://api.jquery.com/data/ $ ('body'). Data ('bar', {myType: 'test', count: 40});

Вот моя попытка переписать его:

$.each(data, function(i,item) {
    $('#' + item.ID).data(item.ID, function(){
        $.each(item) {
            return i + ':' item[i];
        }
    })
}

Есть ли более чистый способ написать это?Я также пробовал $ ('#' + item.ID) .data (item.ID, JSON.stringify (data));

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

Если вы просто хотите добавить полный элемент со всеми его свойствами, вы можете просто сделать это:

$.each(data, function(i,item) {
    $('#' + item.ID).data(item.ID, item);
});

.data() принимает любое значение, включая объект, поэтому вы также можете использовать оригинал. Кроме того, более вероятно, что вы хотите это:

$.each(data, function(i, item) {
    $('#' + item.ID).data("someKey", item);
});

Тогда вы также можете использовать согласованный .data("someKey") для возврата данных, вместо использования собственного .id элемента в качестве ключа данных.

1 голос
/ 14 декабря 2010

Попробуйте:

$('#' + item.ID).data("info", item);

1 голос
/ 14 декабря 2010

Вы можете просто сделать:

$('#' + item.ID).data(item.ID, item);

Вы по-прежнему сможете получить доступ к значениям, как и ожидалось:

$('#' + someId).data(someId).NAME;

Кстати, JSON.stringify не очень хорошая идея, потому что для повторного считывания значений вам придется преобразовать его обратно из строки в объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...