2014-01-07 3 views
5

Я ищу это когда-нибудь. Найдено old article и this. Но не работает для меня.Невозможно установить идентификатор данных в элемент HTML

Моя проблема: я не могу установить приращение data-id в элемент HTML через jQuery. Я могу предупредить об этом, но я не смог установить в HTML. При проверке элемента нет изменений.

JQuery

$(document).ready(function() {  
    $("#search").click(function(){  
    var num = $(this).data('id');  
    num++; 
    $("span").text(num); 
    $(this).data('id', num); 
    });  
}); 

Я попытался это также

$(this).data('id') === num; 

Вот jsFiddle Demo

Я использую v1.9.1 и нет ошибок в консоли. Это здорово, если кто-нибудь может найти проблему.

+1

Обратите внимание, что Jquery 'data' метод не устанавливает атрибуты данных , – Bergi

ответ

8

Все остальные ответы правильные - фиксация 'val' к val - это, конечно, решает проблему NaN.

Проблемы однако:

Я не могу установить инкрементируются данные идентификатора для элемента HTML с помощью JQuery. Я могу , чтобы предупредить об этом, но я не смог установить в HTML. Нет никакого изменения в элемента, если я проверю.

jQuery использует внутреннее представление (1) для data. Если вы хотите увидеть data-id в инспекторе вам нужно использовать: $(this).attr('data-id', num);


(1) «Внутренний represenation»:

Все данные хранятся в свойстве объекта JQuery имени кэша. Запишите содержимое $ .cache в консоли, чтобы просмотреть все данные и события , связанные с любым элементом DOM.

См: https://stackoverflow.com/a/4385015/775359

+2

Я буду придерживаться' .attr'. Спасибо :-) –

2

Проблема в этой строке.

$(this).data('id', 'num'); 

num должно быть переменной, а не строкой.

Изменить его к этому, и он будет работать нормально:

$(this).data('id', num); 
+0

Извините, что это была Typo, не работающая с переменной тоже –

+0

Ваша скрипка работает для меня. Когда вы нажимаете div, число увеличивается. Что вы ожидаете? –

+0

Я не могу установить инкрементный идентификатор данных в HTML-элемент. Посмотрите сами, проверив. –

0

Standard Pure Javascript данных атр

попробовать этот

this.dataset['id']=num; 

или

this.dataset.id=num; 

http://jsfiddle.net/JU4H4/8/

EDIT на основе замечаний, а также, почему я не использую jaquery

здесь является частичной функцией для данных-ATTR взяты из кода JQuery в. (Я не использую JQuery)

function dataAttr(elem, key, data) { 
     var name; 

     // If nothing was found internally, try to fetch any 
     // data from the HTML5 data-* attribute 
     if (data === undefined && elem.nodeType === 1) { 
       name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase(); 
       data = elem.getAttribute(name); 

       if (typeof data === "string") { 
         try { 
           data = data === "true" ? true : 
             data === "false" ? false : 
             data === "null" ? null : 
             // Only convert to a number if it doesn't change the string 
             +data + "" === data ? +data : 
             rbrace.test(data) ? jQuery.parseJSON(data) : 
             data; 
         } catch(e) {} 

         // Make sure we set the data so it isn't changed later 
         data_user.set(elem, key, data); 
       } else { 
         data = undefined; 
       } 
     } 
     return data; 
} 
+0

Нет никакого ' dataset' в коллекциях jQuery? – Bergi

+0

это javascript. и он устанавливает data-attr – cocco

+0

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset – cocco

-1

Используйте переменную num, а не строка 'num':

$(this).data('id', num); 

Updated jsfiddle demo

+0

Извините, что это был Typo, ваша скрипка тоже не работает. Идентификатор данных не установлен на этот элемент (см. Его путем проверки). –

+0

@SurjithSM: Зачем вам это нужно? Конечно, вы могли бы просто использовать 'this.dataset .id = num; 'или' $ (this) .attr ("data-id", num) 'или' $ (this) .prop ("dataset"). id = num', но почему бы не использовать внутренний хранилище данных предоставленный jQuery, который работает во всех браузерах? – Bergi

+0

'.prop (« dataset »)' также работает. Но я буду придерживаться 'attr' now –

2

Попробуйте это, чтобы получить:

$(this).attr('data-id'); 

и это установить Attribué:

$(this).attr('data-id', num); 
Смежные вопросы