*EDIT
I have a list in my HTML called \"#wordlist\". In this list I hold the words in my game, the attached audio and the attached image to each word. This all works
First of all, your html wasn't good at all, you must change it to this:
(data attributes were corrected...)
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>
Then, to assign new values to the data attributes, use the following. In this case I just affected the first li but you can do a loop or .map() in jQuery if you want to change all of them.
Live DEMO: http://jsfiddle.net/oscarj24/qWyj6/1/
jQuery code:
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'));
Changing all li attributes:
just do this using jQuery, this is like the "equivalent" of a loop:
Live DEMO: http://jsfiddle.net/oscarj24/qWyj6/2/
(In live demo check browser's console to see the 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);
});
If you want to get the data attribute from a li and put in a variable, just do this:
//Getting 'number-input' attribute from the first 'li':
var numberInput = $('ul#wordlist li').eq(0).data('number-input');
But, If you want to get all data attributes from all li and put them in variables or javascript object, just do this:
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/
This will be the output:

And, to get for example the number-input value from the first li of this object, just do this:
console.log(data[0].numberInput);
Hope this helps :-)
Untested example, get each instance of *data-*number-input and push it into an array:
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');
}