Adottando valori variables da attributi di dati HTML

* EDIT

Ho un elenco nel mio HTML chiamato "#wordlist". In questo elenco tengo le parole nel mio gioco, l'audio allegato e l'image allegata a each parola. Tutto questo funziona bene.

Poiché ci saranno diverse versioni del gioco, mi è stato chiesto di prendere alcune delle variables in grado di modificare la quantità di parole da completare, la dimensione della griglia ecc; e metterli come attributi di dati nell'elenco. (Rendere disponibili tutti i fattori di modifica in un unico punto).

Il problema è che non riesco a capire come intendo digitare un valore per qualcosa come il "numero-input" in basso e che cambiare la variabile "numberInput" nello script.

È ansible farlo?

Ecco l'elenco (dati-parola, dati-audio e dati-pic sono tutti OK)

<ul id="wordlist"> <li data-audio="" data-pic="images/one.png" data-word="one" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/two.png" data-word="two" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/three.png" data-word="three" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/four.png" data-word="four" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/five.png" data-word="five" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/six.png" data-word="six" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/seven.png" data-word="seven" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/eight.png" data-word="eight" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/nine.png" data-word="nine" data-number-input="" data-completion-number"" data-grid=""></li> <li data-audio="" data-pic="images/ten.png" data-word="ten" data-number-input="" data-completion-number"" data-grid=""></li> </ul> 

Ecco la variabile che devo cambiare attraverso gli attributi di dati nell'HTML

 var numberInput = 2; var completionNumber = 2; var smallGrid = { x: 4, y: 4 }; var largeGrid = { x: 8, y: 6 }; 

Quindi in modo fondamentale quindi se "data-number-input="2" questo farebbe la variabile "numberInput = 2;" nello script

Prima di tutto, il tuo html non era affatto bene, devi cambiarlo a questo:

(gli attributi dei data sono stati corretti …)

HTML:

 <ul id="wordlist"> <li data-audio="" data-pic="images/one.png" data-word="one" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/two.png" data-word="two" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/three.png" data-word="three" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/four.png" data-word="four" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/five.png" data-word="five" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/six.png" data-word="six" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/seven.png" data-word="seven" data-number-input="" data-completion-number="" data-grid=""></li> <li data-audio="" data-pic="images/eight.png" data-word="eight" data-number-input="" data-completion-number="" data-grid=""></li> </ul>​ 

Quindi, per assegnare nuovi valori agli attributi dei data , utilizzare quanto segue. In questo caso ho influenzato solo il primo li ma puoi fare un loop o .map() in jQuery se vuoi cambiarli tutti.

Live DEMO: http://jsfiddle.net/oscarj24/qWyj6/1/

Codice jQuery:

 var numberInput = 2; var completionNumber = 2; var smallGrid = { x: 4, y: 4 }; //In this case, this is just affecting the first 'li' inside 'ul' that's why '.eq(0)' is used. elem = $('ul#wordlist li').eq(0); elem.data('number-input', numberInput.toString()); elem.data('completion-number', completionNumber.toString()); elem.data('grid', smallGrid.x + ',' + smallGrid.y); //Print new 'data' attributes in console to look they've changed. console.log(elem.data('number-input')); console.log(elem.data('completion-number')); console.log(elem.data('grid')); 

Modifica di tutti gli attributi li :

basta farlo usando jQuery, questo è come l'equivalente di un loop :

Live DEMO: http://jsfiddle.net/oscarj24/qWyj6/2/

(Nella console live del browser di controllo demo per visualizzare l'output)

 $('ul#wordlist li').map(function(i, v) { $(this).data('number-input', numberInput.toString()); $(this).data('completion-number', completionNumber.toString()); $(this).data('grid', smallGrid.x + ',' + smallGrid.y); });​ 

Se vuoi get l'attributo di data da un li e metti in una variabile, fai semplicemente:

 //Getting 'number-input' attribute from the first 'li': var numberInput = $('ul#wordlist li').eq(0).data('number-input'); 

Ma, se vuoi get tutti gli attributi di data da tutti i li e inserirli in variables o object javascript, fai semplicemente:

 var data = $('ul#wordlist li').map(function(i, v) { var numberInput = $(this).data('number-input'); var completionNumber = $(this).data('completion-number'); var gridX = $(this).data('grid').split(',')[0]; var gridY = $(this).data('grid').split(',')[1]; return { numberInput: numberInput, completionNumber: completionNumber, grid: { x: gridX, y: gridY } }; }).get(); 

Live DEMO: http://jsfiddle.net/oscarj24/qWyj6/3/

Questa sarà l'output:

immettere qui la descrizione dell'immagine

E per esempio, per esempio, il valore di number-input dal primo li di questo object , fai semplicemente:

 console.log(data[0].numberInput); 

Spero che questo ti aiuti 🙂

Esempio non testato, get each istanza di * data- * numero-input e spingerla in una matrix:

  var numberInputs = []; var list = document.getElementByID('wordlist'); var listItems = list.getElementsByTagName('li'); for(var i = 0;i<listItems.length;i++) { numberInputs.push = listItems[i].getAttribute('data-number-input'); }