2015-11-17 3 views
27

У меня есть следующий HTML:получить данные атрибутов в коде JavaScript

<span data-typeId="123" data-type="topic" data-points="-1" data-important="true" id="the-span"></span> 

Можно ли получить атрибуты, начиная с data-, и использовать его в JavaScript код как код ниже? На данный момент я получаю null.

document.getElementById("the-span").addEventListener("click", function(){ 
    var json = JSON.stringify({ 
     id: parseInt(this.typeId), 
     subject: this.datatype, 
     points: parseInt(this.points), 
     user: "Luïs" 
    }); 
}); 

ответ

33

Вы должны получить доступ к dataset property:

document.getElementById("the-span").addEventListener("click", function() { 
    var json = JSON.stringify({ 
    id: parseInt(this.dataset.typeid), 
    subject: this.dataset.type, 
    points: parseInt(this.dataset.points), 
    user: "Luïs" 
    }); 
}); 

Результат:

// json would equal: 
{ "id": 123, "subject": "topic", "points": -1, "user": "Luïs" } 
6

Вы можете получить доступ к нему, как

element.dataset.points 

и т.д. Таким образом, в данном случае: this.dataset.points

31

Поскольку dataset собственность не была поддержана Internet Explorer до версии 11, вы можете использовать getAttribute() вместо:

document.getElementById("the-span").addEventListener("click", function(){ 
    console.log(this.getAttribute('data-type')); 
}); 

Dataset documentation

getAttribute documentation

-5

Попробуйте вместо кода :

var type=$("#the-span").attr("data-type"); 
alert(type); 
+3

Asker не упомянул jQuery, это даже не хороший jQuery для этого purporse. Должен быть '.data ('type'); вместо этого. –

+1

И, кроме того, предложение использовать это «вместо вашего кода» слишком велико; Asker хотел бы сохранить настройку обработки событий и результат 'JSON', а не' alert' атрибута 'data-type'. – trincot

+1

это jquery, а не чистый javascript. – user3130012