Мне было интересно, есть ли способ использовать несколько селекторов в jQuery и устанавливать для них разные значения в одном вызове.

Например.:

$(selector1, selector2, selector3, ...).css({left:[532, 112, 453, ...]});

Заранее спасибо

Отредактировано . Чтобы было ясно, вы можете вызывать .css только один раз. Является ли это возможным?

Еще раз отредактировал, чтобы уточнить: я спрашиваю, потому что, если, например, я вызываю animate () ... я хотел бы сохранить уникальный синхронизированный вызов / цикл.

2
ozke 17 Июн 2010 в 14:05

4 ответа

Лучший ответ

Короткий ответ, нет, вы не можете этого сделать, селектор и вызываемые вами методы не связаны между собой. Селектор возвращает вам набор элементов, когда это происходит, функция .css() (или любая другая) не знает, в каком положении находится элемент, в котором вы находились, в селекторе.

Если вы думаете об этом, это могут быть все позиции, тогда что он должен делать?

Например:

$("#div, .class1, .class2").css({left:[532, 112, 453]});

Что это должно делать с этим HTML:

<div id="div" class="class1 class2"></div>
<div id="div2" class="class2 class1"></div>

Вы видите, как это быстро сбивает с толку, так что нет, ничего подобного не поддерживается

Чтобы быть справедливым, .css() выполняет функцию п, вот так:

$("#div, .class1, .class2").css('left', function(i, val) {
  //return new left property here
});

Но эти элементы расположены в том порядке, в котором они встречаются в документе , и вообще не связаны с селектором.

3
Nick Craver 17 Июн 2010 в 10:24

Я думаю, что единственный способ сделать это - использовать .each(), например:

$(selector1, selector2, selector3).each(function(idx, element){

  switch(idx)
{
   case : 0
      $(element).css('left', '345');
      break;
   case: 1
      $(element).css('left', '456');
      break;
}
});

РЕДАКТИРОВАТЬ:

Лучшее, что я могу придумать, это:

$(document).ready(
    function() {


    $("div#hello, div#hello1").css('background-color', function(idx, element){

        switch(idx)
        {
            case 0:
                return 'red'

            case 1:
                return 'green'
        }
    });

});

HTML:

<div id="hello">
    <span>test</span>
</div>

<div id="hello1">
    <span>test2</span>
</div>
1
Tim Cooper 27 Сен 2011 в 14:37

Если вы хотите изменить только одно значение CSS:

var values = [532, 112, 453, ...];
$(selector1, selector2, selector3, ...).css('left', function (i, current) {
    return values[i];
});

Почему ты так хочешь?

JQuery всегда будет циклически проходить через все значения внутри. Это не волшебство (и вы должны гарантировать, что позиция индекса для каждого селектора всегда будет одинаковой).

0
Matt 17 Июн 2010 в 10:24

Нет - невозможно (после того, как вы пояснили, что .css () разрешено вызывать ровно один раз)

Обратите внимание: 1. selector1, selector2, selector3 могут совпадать с el1, el4, el5, el6 2. То, что что-то делается за одним вызовом функции, не означает, что это эффективно 3. Выполнение того, что вы просите, не облегчает код читать - это имеет смысл для левого, но как насчет некоторых других свойств

0
selvin 17 Июн 2010 в 10:27