Skip to content

Instantly share code, notes, and snippets.

@iolloyd
Last active December 31, 2015 12:39
Show Gist options
  • Save iolloyd/2d8803418be14e8976dd to your computer and use it in GitHub Desktop.
Save iolloyd/2d8803418be14e8976dd to your computer and use it in GitHub Desktop.
remove non-elements and re-attach in random order
<!DOCTYPE html>
<html>
<head>
<title>permuteChildren()</title>
<script type="text/javascript">
function isElementType(node) {
return document.getElementById(node).nodeType == 1;
}
function getElementTypeChildren(node) {
var children = [].slice.call(node.childNodes);
var elementChildren = [];
for (var i=0; i<children.length; i++) {
if (children[i].nodeType == 1) {
elementChildren.push(children[i]);
}
}
return elementChildren;
}
function removeChildren(node) {
while (node.firstChild) {
node.removeChild(node.firstChild);
}
return node;
}
function randomAttachChildren(node, children) {
for (var n in children) {
node.appendChild(n);
}
}
function randomizeList(lst) {
var idx = lst.length
var rndx;
var tmp;
while (0 !== idx) {
rndx = Math.floor(Math.random() * idx);
idx -= 1;
tmp = lst[idx];
lst[idx] = lst[rndx];
lst[rndx] = tmp;
}
return lst;
}
// receives the id of the parent
function permuteChildren(nodeId) {
var node = document.getElementById(nodeId);
var children = getElementTypeChildren(node);
node = removeChildren(node);
var max = children.length;
var range = Array.apply(null, Array(max)).map(function (_, i) {return i;});
range = randomizeList(range);
for (var i=0; i < max; i++) {
node.appendChild(children[range[i]]);
}
return true;
}
function init() {
permuteChildren('ul');
}
window.onload = init;
</script>
</head>
<body>
<!--
-->
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment