No me refería a
unique de jQuery(solo funciona con los elementos DOM), sino a implementar un unique, algo así(no recuerdo la fuente):
Código Javascript
:
Ver originalArray.prototype.unique = function() {
var a = [];
var l = this.length;
for(var i = 0; i < l; i++) {
for(var j = i + 1; j < l; j++) {
if (this[i] === this[j])
j = ++i;
}
a.push(this[i]);
}
return a;
}
Y podrías cachear los elementos antes del click, sino en cada click estas haciendo un traverse del DOM, tienes que tener en cuenta lo que significa el $, mira el for, estas haciendo un traverse en cada iteración, podrías hacer algo así:
Código Javascript
:
Ver original//ready
var sortable = $('#sortable');
var select = $('#select-result');
var add = $('#resultado-agregar');
$("#agregar").click(function () {
sortable.empty();
var ids = select.val().split(',').concat(add.val().split(',')).unique();
for (var i = 0; i < ids.length; i++) {
sortable.append('<li class="ui-state-default" id="widget-' + ids[i] + '">' + ids[i] +
'<input type="checkbox" class="check" id="eliminar-' + ids[i] + '" ></li>');
}
select.val(ids.join(','));
});
Saludos.