如何使用jquery get select元素具有MULTIPLE模式和反向

Rue*_*eta 12 html javascript jquery select

今天我的工作堆栈.我的堆栈在这里:

我有一个select html元素,它有MULTIPLE模式:

<select class="test" MULTIPLE></select>
Run Code Online (Sandbox Code Playgroud)

(MULTIPLE模式也输入:multiple ="multiple"i included here here)

<select class="test" multiple='multiple'></select>
Run Code Online (Sandbox Code Playgroud)

现在我只想在许多普通的select元素中选择这个元素:

<select class="test" ></select>
<select class="test" ></select>
<select class="test" multiple='multiple'></select>
<select class="test"> </select>
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的jQ:

$(".test[!MULTIPLE]").css('border','solid 1px red');
Run Code Online (Sandbox Code Playgroud)

但是所有选择元素都有边框红色;

我怎样才能获得选择元素MULTIPLE.并选择不是MULTIPLE模式?

Ken*_*ler 15

试试这个:

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

编辑:正如Reigel所提到的,如果避免使用jQuery伪选择器,则可以获得具有更好性能的相同结果集:

$(".test").not([multiple]).css('border','solid 1px red');
Run Code Online (Sandbox Code Playgroud)

编辑2:从评论中可以看出,一些快速测试表明,至少对于我们中的一些人来说,第二个选项实际上更慢.根据css3.info进一步深入研究,对:notCSS3选择器的原生支持比我想象的要广泛得多.这可能会有所不同(对不起IE7),假设jQuery在可用时使用本机选择器.

编辑3:进一步感谢@nickf,他在IE8中运行了这些测试,并发现两者之间没有实质性区别.鉴于所有这些歧义,最好在目标浏览器中测试jQuery伪选择器,或者:not/ .not具体地,是否属于对性能有重大影响的代码热点(如果你有一个受控的目标浏览器环境) ).

但是如果您的目标是所有浏览器,那么最好的建议是使用最适合您代码的方法,并避免过早优化.

  • `:not()`选择器慢于`.not()`;) (2认同)