Способ доступа к массиву с помощью объектов jQuery

#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. как я уже говорил в вопросе. Я знаю, как получить доступ к массиву в цикле. Мой вопрос в том, есть ли более эффективный способ.