Solo la última solicitud de AJAX en tablas de tablas cargadas

Para esta pregunta , creé la siguiente solución de ejemplo: http://jsfiddle.net/PKcnb/3/ .

El código solicita 50 videos (debido a limitaciones de la solicitud) a través de la API de YouTube. Cada solicitud agrega una nueva fila a la mesa final. Quería una solución de clasificación simple, así que usé jquery.sortElements.js.

sortElement.js parece funcionar pero solo clasifica los videos de la última solicitud realizada. ¿Por qué no está ordenada toda la mesa? Buscando alrededor, parece que necesito implementar .live () pero mis bashs no han tenido éxito.

JQuery relevante

// Recursive function to grab the next set of videos function getVideos(index, max) { $.ajax({ url: 'https://gdata.youtube.com/feeds/api/playlists/UUAuUUnT6oDeKwE6v1NGQxug?v=2&orderby=duration&max-results=50&start-index=' + index, // 'https://gdata.youtube.com/feeds/api/users/tedtalksdirector/uploads', dataType: "xml", success: function(xml) { var videos = $(xml).find("entry"); videos.each(function() { var title = $(this).find("title").text(); var duration = $(this).find("duration").attr("seconds"); var minutes = Math.floor(duration / 60); var seconds = (duration % 60); if (seconds < 10) seconds = "0" + seconds; var newRow = $(""); newRow.append("" + title + ""); newRow.append("" + duration + ""); $("tbody#videos").append(newRow); }); newIndex = index + 50; $('#VideosLoaded').html(newIndex - 1); if (newIndex < max) { getVideos(newIndex, max); } } }); } // Make table sortable (jquery.sortElements.js) // via https://stackoverflow.com/questions/5066002/sending-one-ajax-request-at-a-time-from-a-loop var table = $('table'); $('#Title, #Duration').wrapInner('').each(function() { var th = $(this), thIndex = th.index(), inverse = false; th.click(function() { table.find('td').filter(function() { return $(this).index() === thIndex; }).sortElements(function(a, b) { return $.text([a]) > $.text([b]) ? inverse ? -1 : 1 : inverse ? 1 : -1; }, function() { // parentNode is the element we want to move return this.parentNode; }); inverse = !inverse; }); });​ 

Creo que la rutina de clasificación funcionará mejor así:

 $('#Title, #Duration').wrapInner('').each(function() { var th = $(this), thIndex = th.index(), inverse = false; th.click(function() { table.find('td').filter(function() { return $(this).index() === thIndex; }).sortElements(function(a, b) { var id = th.attr('id'), a = (id === 'Duration') ? parseInt($(a).text()) : $(a).text(), b = (id === 'Duration') ? parseInt($(b).text()) : $(b).text(), x = (a === b) ? 0 : (a > b) ? 1 : -1; return (x === 0) ? 0 : inverse ? -x : x; }, function() { return this.parentNode; }); inverse = !inverse; }); }); 

Violín actualizado