Рабочий пример: http://jsfiddle.net/JVVcA/
HTML:
<fieldset id="data-page">
<legend>data-page</legend>
<button rel="page1">Highlight page one</button>
<button rel="page2">Highlight page two</button>
<div data-page="page1">
<h1 id="page1">Page one</h1>
<h1 id="page2">Page two</h1>
</div>
</fieldset>
<fieldset id="class">
<legend>class</legend>
<button rel="page3">Highlight page three</button>
<button rel="page4">Highlight page four</button>
<div class="page3">
<h1 id="page3">Page three</h1>
<h1 id="page4">Page four</h1>
</div>
</fieldset>
CSS:
fieldset { border: 1px solid #aaa; padding: 5px; }
h1 { background-color: white; }
div[data-page="page1"] h1#page1 { background-color: pink; }
div[data-page="page2"] h1#page2 { background-color: pink; }
div.page3 h1#page3 { background-color: cyan; }
div.page4 h1#page4 { background-color: cyan; }
JS:
$('#data-page button').click(function(){
var rel = $(this).attr('rel');
$(this).siblings("div").attr('data-page', rel);
});
$('#class button').click(function(){
var rel = $(this).attr('rel');
$(this).siblings("div").attr('class', rel);
});
Начальная загрузка:
После нажатия «Выделить страницу две» и «Выделить страницу четыре» в Webkit (в частности, в Google Chrome стабильной Windows 7):
Сделав то же самое в Firefox:
Как вы можете видеть, селектор data-page
отлично работает при начальном рендеринге страницы, но когда DOM манипулирует на лету, стили, определенные селектором [data-page="???"]
CSS, соответственно не затрагиваются. Сравните это с ситуацией с селекторами классов. Когда классы меняются на лету, стили меняются, как и ожидалось.
Возможно, связанное примечание состоит в том, что я сталкивался со случаями при использовании этого селектора атрибута в сочетании с переходами CSS, когда происходит похожее отсутствие отзывчивости, но в тех случаях, когда вы щелкаете в другом месте страницы, машете мышью или ожидание немного в конечном итоге приводит к ожидаемому изменению.
Так есть ли способ обойти это, кроме как просто поднять руки и не использовать атрибуты data-page
в стиле?