Использование 2 переменных одновременно - PullRequest
2 голосов
/ 21 сентября 2011

Как мне это сделать?

$(function() {

   var foo = $('#foo'),
       bar = $('#bar');

    $('body').click(function() {

        $(foo,bar).css({color: 'red'}); 

    });

});

Демо: http://jsfiddle.net/each/RGZ4Z/ - только foo становится красным

Редактировать : могу ли я подчеркнутьтот факт, что я знаю, я мог бы легко сделать:

$('#foo,#bar').css({color: 'red'});

Я просто спрашиваю об использовании переменных ...

Ответы [ 2 ]

8 голосов
/ 21 сентября 2011

Вероятно, вы хотите это:

foo.add(bar).css({color: 'red'});

Вот демонстрационный пример кода, который показывает, как это может работать: http://jsfiddle.net/jfriend00/3Ep6J/.

В зависимости от того, что вы хотите, я могу придумать три варианта:

  1. var items = $('#foo, #bar')
  2. $('#foo, #bar').css({color: 'red'});
  3. foo.add(bar).css({color: 'red'});

И, более подробно о каждом варианте:

1) Вы можете просто создать один объект jQuery в начале, в котором есть оба набора объектов, например:

var objs = $('#foo, #bar');

и затем позже сделайте это:

objs.css({color: 'red'}); 

2) Или просто сделать все сразу:

$('#foo, #bar').css({color: 'red'}); 

3) Или, если у вас уже есть отдельные объекты jQuery для foo и bar, вы можете добавить элементы из одного объекта jQuery в другой и затем выполнить свою операцию:

var foo = $('#foo'),
    bar = $('#bar');

, а потом, сделайте это:

foo.add(bar).css({color: 'red'}); 

Примечание: несколько нелогично, вариант 3) не изменяет объект foo jQuery, метод add возвращает новый объект jQuery с добавленными к нему элементами из bar.

2 голосов
/ 21 сентября 2011

+ 1 к ответу jfriend00, но я подумала, что мне нужно вмешаться, чтобы объяснить , почему ваши не сработали.

jQuery "конструктор" имеет три сигнатуры метода (по существу):

  1. $(selector[, context]) для создания объекта jQuery из существующих элементов
  2. $(html[, ownerDocument]) для создания новых элементов
  3. $(callback) как псевдоним для $(document).ready(callback)

Вы используете первую опцию, а selector - это уже существующий объект jQuery (что хорошо), однако, добавив аргумент bar, это означает, что он обрабатывает этот элемент как контекст . По сути: «дайте мне набор результатов, содержащий все элементы foo , которые существуют внутри элемента bar».

Кроме того, если вы знаете , что у вас уже есть объект jQuery в переменной, просто расточительно обернуть его другим вызовом $().

bar = $('#bar');
$(bar).show();  // unnecessary!
bar.show();     // better!

Чтобы помочь мне вспомнить, я всегда начинаю с префикса jQuery переменную $:

$bar = $("#bar");
$bar.show(); // less ambiguous! woo!
...