//saving <ul> element wiсh id is 'name' to the ul variable
var ul = document.getElementById("name"),
//cloning this ul and all its child elements to the temp variable;
//cloneNode(true) means deep copy, cloneNode(false) copies only the node
temp = ul.cloneNode(true),
// we will start from the end of the child nodes array and go down
i = temp.children.length + 1;
//at each iteration we will decrement i and compare it to 0
while (i-- > 0)
//while this condition is true we take a random node from the child elements array;
//here we use Math.random() to generate a random number from 0 to 1,
//multiply it by i to get a number from 0 to i and then use bitwise OR with 0
//to convert this floating point number to an integer (see below for more details);
//and then we append this random child to the temp; if a node already exists
//in the DOM, then appendNode will remove it before appending, so we just replace
//the nodes in random order
temp.appendChild(temp.children[Math.random() * i | 0]);
//and finally we replace the old ul with a new one
ul.parentNode.replaceChild(temp, ul);
For more information about bitwise OR take a look here