Hoje no iMasters um cara pediu para desordenar itens de uma lista html.

Bom, desordenar um array é simples, e array em javascript é um objeto, logo desordenar um objeto é simples também.

Basta pegarmos os itens da lista, desordena-los, remove-los do DOM, e então inseri-los novamente.

Versão com javascript puro

<ul id="items">
	<li>1</li>
	<li>2</li>
	<li>3</li>
	<li>4</li>
	<li>5</li>
	<li>6</li>
	<li>7</li>
	<li>8</li>
	<li>9</li>
	<li>10</li>
</ul>

<script>
(function(){
	/**
	 * Deixar os itens do array em ordem aleatoria
	 */
	Array.prototype.shuffle = function() {
	  var i = this.length, j, tempi, tempj;
	  if ( i == 0 ) return this;
	  while ( --i ) {
	     j       = Math.floor( Math.random() * ( i + 1 ) );
	     tempi   = this[i];
	     tempj   = this[j];
	     this[i] = tempj;
	     this[j] = tempi;
	  }
	  return this;
	}

	/**
	 * Inicialização das variaveis
	 */
	var items = document.getElementById('items'),
		lis = items.getElementsByTagName('li'),
		arr = [],
		max = lis.length;

	/**
	 * Colocando o html colection em um array
	 */
	for( var i = 0; i<max; i++ ){
		arr[i] = lis[i];
	}
	arr = arr.shuffle();

	/**
	 * Removendo os items
	 */
	while (items.firstChild) {
	    items.removeChild(items.firstChild);
	}

	/**
	 * Inserindo novamente no DOM
	 */
	while( i-- ){
		items.appendChild( arr[i] );
	}

})();
</script>

Versão com jQuery

<ul id="items">
	<li>1</li>
	<li>2</li>
	<li>3</li>
	<li>4</li>
	<li>5</li>
	<li>6</li>
	<li>7</li>
	<li>8</li>
	<li>9</li>
	<li>10</li>
</ul>

<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script>
var shuffle = function( el ) {
 var i = el.length, j, tempi, tempj;
 if ( i == 0 ) return el;
 while ( --i ) {
    j       = Math.floor( Math.random() * ( i + 1 ) );
    tempi   = el[i];
    tempj   = el[j];
    el[i] = tempj;
    el[j] = tempi;
 }
}

var arr = jQuery('#items').find('li');
shuffle( arr );
jQuery('#items').html( arr );
</script>