Вопрос: пожалуйста,
var ids = ['user_1', 'user_2', 'user_3', 'user_666'];
Мой HTML
username-1
username-2
username-5
Как использовать jQuery, мой контейнер выглядит следующим образом:
username-1
username-2
username-3
username-666
Удалите div с id = "user_5"
(у нас нет этого в нашем списке идентификаторов) и добавьте div с id = "user_666" (в нашем списке идентификаторов).
Большое спасибо!
Я пробовал что-то подобное, но это не работает:
jQuery('#chatUsers').filter(function() {
var a = jQuery(this).find('div');
alert ("Filtering: divs count: " + a.length);
//if (!a.length)
//return true;
var id = a.attr('id');
if (jQuery.inArray(id, ids) >= 0)
return false;
return true;
}).remove();
Что-то вроде этого будет работать и не нарушать существующие элементы:
var ids = ['user_1', 'user_2', 'user_3', 'user_666'];
$('#chatUsers').children().filter(function() {
return ids.indexOf(this.id) === -1;
}).remove();
var length = ids.length;
for (var i = 0; i < length; i++) {
if (!document.getElementById(ids[i])) {
$('', { id: ids[i], text: ids[i] }).appendTo('#chatUsers');
}
}
Он не устанавливает текст в точности при добавлении новых. Я предполагаю в вашем реальном коде, у вас есть свойство объекта в массиве, которое вы можете использовать для этого.
Он также не упорядочивает их при добавлении, но это возможно с помощью insertAfter ()
.
Если массив содержит все элементы, которые вы хотите включить в список, вы можете начать с пустого элемента и добавить все элементы из списка, например:
$("#chatUsers").children().remove();
var ids = ['user_1', 'user_2', 'user_3', 'user_666'];
for ( id in ids ) {
$("#chatUsers").append( 'username-X' );
}
Это было бы намного проще, чем пытаться выработать то, что у вас уже есть в элементе, а затем исправить это.
Here is my solution, on jsFiddle: http://jsfiddle.net/aTkPZ/2/
И вот JavaScript:
$(function(){
var ids = ['user_1', 'user_2', 'user_3', 'user_666'];
var div = $('#chatUsers');
var selector = '#' + ids.join(', #');
div.find('div').not(selector).remove();//remove ones not in the list
for (var i = 0, max = ids.length; i < max; i++) {
if (!div.find('#' + ids[i]).length)
div.append('username-' + ids[i].replace('user_','') + '');
}
});