不幸的是,这是目前只有CSS才能实现的功能。如在对this question的回答和评论中所述,目前没有办法使父母基于其子女接收造型。
为了做你想做的事情,你基本上必须检测哪个孩子(<option>
)被选中,然后相应地设计父母的样式。
你可以,但是,有一个非常简单的jQuery调用做到这一点,如下所示:
HTML
<select>
<option value="foo">Foo!</option>
<option value="bar">Bar!</option>
</select>
jQuery的
var $select = $('select');
$select.each(function() {
$(this).addClass($(this).children(':selected').val());
}).on('change', function(ev) {
$(this).attr('class', '').addClass($(this).children(':selected').val());
});
CSS
select, option { background: #fff; }
select.foo, option[value="foo"] { background: red; }
select.bar, option[value="bar"] { background: green; }
这是working jsFiddle。
回到关于选择器未来的问题。是 - “主题”选择器旨在完成您提到的内容。如果/当他们曾经实际上在现代浏览器去住,你能适应上面的代码:
select { background: #fff; }
!select > option[value="foo"]:checked { background: red; }
!select > option[value="bar"]:checked { background: green; }
作为一个侧面说明,仍有争论有关!
是否应该之前或主语之后去了。这是基于!something
的编程标准,意思是“不是什么”。其结果是,在基于主题的CSS实际上可能拉闸看起来像这个:
select { background: #fff; }
select! > option[value="foo"]:checked { background: red; }
select! > option[value="bar"]:checked { background: green; }
我可以对你选择的awnser提出异议,敬请关注。这是非常“黑客” – Justin 2013-05-02 18:56:05
@Justin - 如果有更好的答案,我会改变接受的答案。但目前对我来说已经足够了。 – Aprillion 2013-05-02 19:14:34
看看我的anwser,让我知道它是否真的让你的问题大声笑。 – Justin 2013-05-02 20:05:50