Ответ AJAX с использованием атрибута данных HTML5

#javascript #jquery #ajax #html

#javascript #jquery #ajax #HTML

Вопрос:

У меня есть рабочая среда, в которой я использую AJAX-ответ для заполнения HTML-элементов.

например, ответ AJAX содержит два (или n) объекта, подобных этому:

 0:Object
     id: "111"
     Name: "abc"
1:Object
     id: "112"
     Name: "xyz"
 

Тогда уже было бы два (или n) divs с user class и HTML5 data-user , содержащих идентификатор в HTML

 <div class='user' data-user='111'>
    <div class='userId'data-userId='111> </div>
     <div class='usernm' data-user='usernm'> </div>
</div>

<div class='user' data-user='112'>
    <div class='userId'data-userId='112> </div>
     <div class='usernm' data-user='usernm'> </div>
</div>
 

Что мне нужно, так это поместить эти значения ответа в этот раздел следующим образом:

 <div class='user' data-user='111'>
    <div class='userId'data-userId='111> 111 </div>
     <div class='usernm' data-user='usernm'> abc </div>
</div>
 <div class='user' data-user='112'>
    <div class='userId'data-userId='112> 112 </div>
     <div class='usernm' data-user='usernm'> xyz </div>
</div>
 

То, что я сейчас делаю (и работаю), — это использование jQuery find (см. Код ниже), но теперь мне предлагается поместить ответы с использованием data-.. атрибута HTML5. Я не могу обойти это, если кто-нибудь может помочь с этим..

 $.ajax({
    type: 'GET',
    url: '/url/goes/here',
    dataType: "json",
    success: function(data) {
       $('.user').each(function(key, value){ //i need to remove .user and use data-user here (if possible)
            $(value).find('.userid').text(data[key].id); //i need to put values using data attr instead of find
            $(value).find('.usernm').text(data[key].name); //i need to put values using data attr instead of find              
       });
    }
});
 

Ответ №1:

Доступ к атрибутам данных осуществляется:

 $(#id).data('userId');
 

или

 $(#id).attr('data-userId');
 

и установить значение в этом атрибуте данных:

 $(#id).data('userId', 'value');
 

или

 $(#id).attr('data-userId', 'value');
 

Комментарии:

1. поскольку я беспокоюсь о времени ответа, я заменяю его с помощью find (надеюсь, я прав), поэтому для повышения скорости, что было бы лучше — attr или data ?

2. attr — это распространенный метод доступа к идентификатору, названию и т.д. и данным только для атрибутов данных. Так что используйте в соответствии с вашим удобством.

3. $('div[data-userId="' data[key].id '"]', data[key].id); возможно ли что-то подобное?

4. data() Метод jQuery не устанавливает a data-attribute . Он сохраняет за сценой ссылку на элемент и данные, переданные как значение. $(element).data('attr', 'value') element.getAttribute('data-attr') вернется null . Кроме того, element[data-attr] селектор CSS не будет соответствовать элементу. Однако он может получить данные-атрибуты, если jQuery не data был установлен.