JQuery - несколько селекторов и несколько значений в одном вызове - PullRequest
2 голосов
/ 17 июня 2010

Мне было интересно, есть ли способ использовать несколько селекторов в jQuery и устанавливать для них разные значения В ОДНОМ ВЫЗОВЕ.

например:.

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

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

Отредактировано: Просто для ясности вы можете позвонить .css только один раз. Возможно ли это?

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

Ответы [ 4 ]

3 голосов
/ 17 июня 2010

Короткий ответ, нет, вы не можете этого сделать, селектор и вызываемые вами методы не связаны таким образом. Селектор возвращает вам набор элементов, когда это происходит, функция .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() делает функцию n, как это:

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

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

1 голос
/ 17 июня 2010

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

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

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

EDIT:

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

$(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>
0 голосов
/ 17 июня 2010

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

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

0 голосов
/ 17 июня 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...