Как использовать jquery get select имеет режим MULTIPLE и reverse

У меня есть стек с моей работой сегодня. Мой стек:

У меня есть элемент select html и он имеет режим MULTIPLE:

<select class="test" MULTIPLE></select>

(Режим MULTIPLE также имеет тип: multiple = "multiple" я здесь)

<select class="test" multiple='multiple'></select>

теперь я хочу только выделить этот элемент во многих элементах обычного выбора:

<select class="test" ></select>
<select class="test" ></select>
<select class="test" multiple='multiple'></select>
<select class="test"> </select>

i использовал jQ следующим образом:

$(".test[!MULTIPLE]").css('border','solid 1px red');

но весь элемент select имеет красную границу,

Как я могу получить только элемент select MULTIPLE. И получить выбор не в режиме MULTIPLE?

Ответ 1

Попробуйте следующее:

$(".test:not([multiple])").css('border','solid 1px red');

Изменить: Как упоминает Рейгель, вы можете получить тот же набор результатов с лучшей производительностью, если вы избежите псевдоселектора jQuery:

$(".test").not([multiple]).css('border','solid 1px red');

Изменить 2: Как вы можете сказать из комментариев, некоторые быстрые тесты показывают, что, по крайней мере для некоторых из нас, второй вариант на самом деле медленнее. Копаем дальше, согласно css3.info, встроенная поддержка селектора :not CSS3 более распространена, чем я думал. Вероятно, это имеет большое значение (извините IE7), предполагая, что jQuery использует собственный селектор, когда он доступен.

Изменить 3: Далее благодаря @nickf, который запускал эти тесты в IE8 и не обнаружил существенных различий между ними. В свете всей этой двусмысленности было бы разумно протестировать в вашем целевом браузере, если jseu-selectors jQuery или :not/.not в частности, попадают в горячую точку кода, которая оказывает существенное влияние на производительность (и если вы имеют контролируемую целевую среду браузера).

Но если ваша цель - все браузеры, похоже, лучший совет - использовать то, что лучше всего подходит вашему коду, и избегать преждевременной оптимизации.

Ответ 2

$('.test').not('[multiple]').css('border','solid 1px red');

но если вы используете IE 7 и ниже, границы в элементах выбора не будут меняться, как ожидалось.

Ответ 3

Другим способом сохранить его универсальным на странице без ограничения класса является такой способ -

$("select[multiple='multiple']").each(function () {
    $('#'+this.id+' option:selected').prependTo(this);
});

ссылка JSFiddle