Я пытаюсь использовать селекторы атрибута и CSS для элементов форматирования.
HTML похож:
<div id="user" highlight="false">User Name</div>
CSS:
[highlight=true]
{
background-color: red;
}
[highlight=false]
{
background-color: white;
}
И затем существует некоторый сопроводительный JavaScript:
if( foo )
{
node.setAttribute('highlight', true);
}
else
{
node.setAttribute('highlight', false);
}
Это работает в Firefox и Chrome. Когда атрибут выделения изменяется JavaScript, изменения цвета фона элемента как соответствующий. В IE8, однако, это - другая история. Элемент отобразится правильно согласно значению выделения, которое первоначально присвоено в HTML, но когда атрибут изменяется динамично, дисплей элемента не изменяется.
Действительно ли это - известная причуда и является там известным обходным решением?
Обновление я просто изменил название атрибута на "frob" со значениями "на" и "прочь". Это должно уладить любую проблему о зарезервированных или поддающихся толкованию значениях.
Еще одна знаменитая вещь. Когда я включу инструменты разработчика IE8 и использую инспектора HTML, это покажет стиль [frob=on] или [frob=off], как использовано независимо от того, что значение frob имело, когда я запустил инспектора документа. Однако атрибут frob больше не будет затем изменяться в представлении инспектора. Ни в коем случае не сделайте значения в [frob=on/off] CSS когда-либо применяются после начального рендеринга HTML.
Обновление: проблема Решила решение, должен вызвать перерисовку. Существуют различные способы сделать это, но кажется, что стандартный должен повторно присвоить имя класса себе.
Вы используете неизвестный атрибут hightlight
. Это IE, поэтому он поддерживает атрибуты в соответствии со своим именем (что кажется сложнее, чем поддерживать каждое имя атрибута, но... это IE).
Просто используйте class="hightlight"
- проще в реализации и работе.
Вы устанавливаете атрибут JavaScript True
и , не строку
, а не строку «True»
и «ЛОЖЬ»
. Это может интерпретировать браузер как 1
и 0
и привести к нежелательным результатам.
Вы можете попробовать
node.setAttribute('highlight', 'true');
?
Во избежание неизбежной проблемы совместимости кросс-браузера с JavaScript / CSS я бы рекомендовал использовать jQuery .
Например, чтобы выделить элемент через jQuery Framework Это все, что требуется ...
$("div").click(function () {
$(this).effect("highlight", {}, 3000);
});