不幸的是,這是目前只有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