2016-03-18 13 views
5

sto lottando con quello che è probabilmente molto semplice po 'di jQueryCome accedere attributo data utilizzando jQuery

ho html come questo:

<div class="star-rating" data-star-rating="5.0"></div> 
<div class="star-rating" data-star-rating="2.0"></div> 

Ho un javascript che ha bisogno di fare qualcosa sulla base del numero di stelle di ciascuno di questi elementi e attualmente si presenta in questo modo:

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : <value of data-star-rating> 
}); 

voglio sostituire <value of data-star-rating> con il valore dei dati relativi attributi all'elemento in fase di elaborazione

Ho pensato che questo avrebbe funzionato $(this).data('starRating') ma non sembra

Come posso accedere al valore dell'attributo di dati in questa situazione?

+0

Hai provato '$ (this) .data ('star-rating')'? – j08691

+0

cosa restituisce 'console.log ((". Star-rating "). Data ('star-rating'))' Non si passa nemmeno attraverso gli elementi, quale si dovrebbe ottenere? 5.0 o 2.0? –

+0

@ksno restituisce qualunque sia il primo ... non proprio rilevante anche se – Edd

risposta

4

$(this) non si riferisce all'elemento su cui viene chiamata la funzione jRate.

È possibile utilizzare il selettore se c'è solo un unico elemento con quella classe

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : $('.star-rating').data('star-rating') 
}); 

per più elementi:

iterare su tutti gli elementi che hanno la classe star-rating e allegare il plugin jRate singolarmente con il valore rating del rispettivo elemento.

$('.star-rating').each(function() { 
    $(this).jRate({ 
     startColor: '#ccc', 
     endColor: '#ccc', 
     readOnly: true, 
     rating: $(this).data('star-rating') 
    }); 
}); 

JSFiddle DemoNon hai trovato CDN link del plug-in che, così ha aggiunto il codice minimizzato nel riquadro JavaScript per sé

1

È necessario utilizzare questo:

$(this).attr('data-star-rating'); 
+0

Non è vero per 'data()'. Restituisce e restituisce gli attributi dei dati HTML. – toomanyredirects

5

È possibile utilizzare anche questo:

$(this).data('star-rating'); 

EDIT

Dopo aver letto di nuovo la questione. I commenti sono giusti, dovresti scorrere l'array .star-rating per applicare la jRate a ciascun elemento, mi dispiace per il mio malinteso.

$('.star-rating').each(function() {  
    $(this).jRate({ 
     startColor: '#ccc', 
     endColor: '#ccc', 
     readOnly: true, 
     rating: $(this).data('star-rating') 
    }); 
}); 
+0

A partire da jQuery 1.4.3 gli attributi di dati HTML 5 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. – Pradeep

+1

Non so perché questo ha 5 upvotes in quanto questo non risponde alla domanda? Perché '$ (this) .data ('starRating');' non ha funzionato in quanto è assolutamente valido. – Jai

+0

Solo dicendo, dopo la recente modifica questo sembra esattamente come [la mia risposta] (http://stackoverflow.com/a/36085321/2025923) – Tushar

2

Come ci sono più di uno gli elementi che hanno codice categoria "star-rating" quindi sarà necessario collegare attraverso le elemets e ciclo foreach farà attuale elemento di iterazione accessibili in loop in modo da poter utilizzare tale elemento. E applica il JRate.

$('.star-rating').forEach(function(dateRating){ 
    $(dateRating).jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : $(dateRating).attr("data-star-rating") 
}); 
}); 
+1

Mentre questa risposta è probabilmente corretta e utile, è preferibile se [includi qualche spiegazione lungo con esso] (http://meta.stackexchange.com/q/114762/159034) per spiegare come aiuta a risolvere il problema. Ciò diventa particolarmente utile in futuro, se c'è un cambiamento (possibilmente non correlato) che lo fa smettere di funzionare e gli utenti devono capire come funzionava una volta. Grazie! – Hatchet

+0

Aggiunta una descrizione. Penso che questo sia un codice così generico che chiunque può capire se usa JavaScript e JQuery. – dsk

0

$(this).data('star-rating') funzionerà se si torna da una funzione.

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : function() { return $(this).data('star-rating'); } 
}); 
Problemi correlati