#javascript #jquery #arrays #dom
#javascript #jquery #массивы #dom
Вопрос:
у меня есть массив, подобный следующему
[jQuery('div#example1'), jQuery('div#example2'), jQuery('div#example3'), jQuery('div#etcetera')]
Цель
elementArray = [jQuery('div#example1'), jQuery('div#example2'), jQuery('div#example3'), jQuery('div#etcetera')];
$(elementArray).remove();
//or
$(elementArray).css('border', '1px solid red');
Я хочу, чтобы все они получали одинаковую обработку с помощью некоторой функции. Единственный известный мне способ получить доступ к элементам — это выполнить цикл через массив.
Может ли кто-нибудь подсказать мне более эффективный способ сделать это?
Комментарии:
1.
jQuery(div#wallItem303.wallItem✉)
должно бытьjQuery('div#wallItem303.wallItem✉')
— вы пропускаете кавычки.2. Ошибка @sime в примере, скопированная из firebug.
Ответ №1:
Вот так:
$.each(elementArray, function(i, v) {
v.remove();
});
При использовании $.each
функция выполняется для каждого элемента массива (на который ссылается v
).
Живая демонстрация: http://jsfiddle.net/XyRZE
Обновление: Вы могли бы использовать map
для замены каждого объекта jQuery в массиве объектом элемента DOM, который содержится в нем.
$(elementArray).map(function(i, v) { return v[0]; }).remove();
Живая демонстрация: http://jsfiddle.net/XyRZE/1
Комментарии:
1. как я уже говорил в вопросе. Я знаю, как получить доступ к массиву в цикле. Мой вопрос в том, есть ли более эффективный способ.
Ответ №2:
Возможно, вы могли бы выделить все элементы вместе в один массив jQuery
var myArray = $("div#wallItem303.wallItem, div#wallItem103.wallItem, div#wallItem323.wallItem");
myArray.css('border', '1px solid red');
Ответ №3:
Вы можете настроить таргетинг на несколько элементов в селекторе jquery.
Смотрите jQuery multiple selector api.
jQuery('#wallItem303, #wallItem303').remove();
Примечание: если у вас есть идентификатор, не добавляйте к нему префикс nodeName в селекторе.
Комментарии:
1. это сработало бы, за исключением того, что существует массив объектов jQuery, а не строк селектора. Мне нужно использовать этот массив.
Ответ №4:
Вот решение. То, что вы сделали, прекрасно, однако, если вы хотите использовать функцию, здесь у вас есть:
$(elementArray).each(function(){
$(this).css('border', '1px solid red');
//Do whatever you want in this function
});
Надеюсь, это поможет. Приветствия
Комментарии:
1. как я уже говорил в вопросе. Я знаю, как получить доступ к массиву в цикле. Мой вопрос в том, есть ли более эффективный способ.