2014-05-11 13 views
8

Sto leggendo alcuni valori nei campi degli attributi dei dati. Ho visto due semplici modi per leggere i dati come illustrato di seguito:dataset vs .data - Differenza?

var webappData = document.getElementById('web-app-data'), 
    rating = webappData.dataset.rating; 

O

var effectData = $('.effects-list li'), 
    creative = effectData.filter('[data-creative]').data("creative"); 

La mia domanda è: quale di questi ha una migliore performance o fanno veramente differiscono?

Ho una pagina con molti attributi di dati a cui sto accedendo e vorrei utilizzare il metodo che ha le migliori prestazioni.

Sarebbe gradita qualsiasi indicazione sulla comprensione della differenza tra i due. Mentre guardo le prestazioni in modo specifico se ci sono altri motivi per usare l'una sull'altra mi piacerebbe sapere anche questo.

+0

direi puro JS è più veloce o uguale a jQuery –

+0

Dal .dataset è puro Ja Suppongo che dovrebbe essere più veloce dell'uso di .data() (dopo tutto, almeno ti manca una chiamata di funzione), anche se la differenza è probabilmente di qualche millisecondo. L'unica cosa che devi sempre considerare è che non tutti i browser conoscono .dataset. Fare riferimento qui per la compatibilità del browser: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset#Browser_compatibility –

risposta

29

dataset è una struttura nativa di un elemento che contiene gli attributi dei dati, è un nuovo (ish) Inoltre, e come tale è supportato solo in IE11 +, Cromo 8+, FF 6+ ecc

A più trasversale soluzione browser dovrebbe essere per ottenere l'attributo direttamente

webappData.getAttribute('data-rating'); 

data() è un metodo jQuery, e tranne usando l'attributo di dati HTML5 per impostare il valore iniziale che se non esiste internamente, non ha nulla in comune con set di dati .

data() memorizza qualsiasi dato si passa in un oggetto interno creato da jQuery, quindi questo per esempio fallirebbe

$(element).data('key', 'value'); 

element.dataset.key // undefined 

come i dati non vengono memorizzati in attributi a tutti, ma internamente da jQuery.
L'equivalente jQuery di ottenere e impostare l'attributo di dati sarebbe attr()

$(element).attr('data-key', 'value'); 

I metodi nativi sono probabilmente più veloce, ma come in realtà non sono paragonabili a jQuery di data() esso non importa, ma per ottenere l'attributo di dati penserei il metodo più veloce con il miglior supporto del browser sarebbe

var rating = webappData.getAttribute('data-rating'); 
+0

Grazie per l'informazione. Oltre alla compatibilità con i browser ci sono motivi per usare '.getAttribute' su' .dataset'? – L84

+0

In effetti ci sono: La mia esperienza è che .dataset non funziona su tutti i browser (specialmente gli IE più vecchi non funzionano) –

+1

btw: 'A partire da jQuery 1.4.3 HTML 5 dati- gli attributi verranno automaticamente inseriti nell'oggetto dati di jQuery . Il trattamento degli attributi con trattini incorporati è stato modificato in jQuery 1.6 per conformarsi alle specifiche HTML5 del W3C.' –