Селекторы атрибута, JavaScript и IE8

Я пытаюсь использовать селекторы атрибута и 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.

Обновление: проблема Решила решение, должен вызвать перерисовку. Существуют различные способы сделать это, но кажется, что стандартный должен повторно присвоить имя класса себе.

5
задан Kennet Belenky 22 January 2010 в 00:10
поделиться

3 ответа

Вы используете неизвестный атрибут hightlight . Это IE, поэтому он поддерживает атрибуты в соответствии со своим именем (что кажется сложнее, чем поддерживать каждое имя атрибута, но... это IE).

Просто используйте class="hightlight" - проще в реализации и работе.

2
ответ дан 15 December 2019 в 06:26
поделиться

Вы устанавливаете атрибут JavaScript True и , не строку , а не строку «True» и «ЛОЖЬ» . Это может интерпретировать браузер как 1 и 0 и привести к нежелательным результатам.

Вы можете попробовать

node.setAttribute('highlight', 'true');

?

1
ответ дан 15 December 2019 в 06:26
поделиться

Во избежание неизбежной проблемы совместимости кросс-браузера с JavaScript / CSS я бы рекомендовал использовать jQuery .

Например, чтобы выделить элемент через jQuery Framework Это все, что требуется ...

$("div").click(function () {
      $(this).effect("highlight", {}, 3000);
});
0
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: