Может! важные правила использоваться в выражениях CSS IE?

var full = window.location.host
//window.location.host is subdomain.domain.com
var parts = full.split('.')
var sub = parts[0]
var domain = parts[1]
var type = parts[2]
//sub is 'subdomain', 'domain', type is 'com'
var newUrl = 'http://' + domain + '.' + type + '/your/other/path/' + subDomain
window.open(newUrl);
9
задан Bill the Lizard 29 April 2012 в 02:17
поделиться

6 ответов

Причина, по которой эти выражения CSS не работают, заключается в том, что IE оценивает выражение только для последнего свойства в каскаде.

Например, если у вас есть HTML-документ со ссылкой внутри него и следующим «CSS»,

a {
    color: expression(function(e){
        alert('success');
        e.runtimeStyle.color = 'blue';
    }(this));
}
a { color: red; }

вы будете никогда не видеть это предупреждение (не говоря уже об изменении стиля), потому что выражение CSS никогда не вычисляется. Так что нет, ты можешь ' • Используйте выражение для установки флага ! important .

То есть не тогда, когда вы пытаетесь установить его для того же свойства. Можно обмануть. Но это немного усложняет выражение:

a {
    filter: expression(function(e){
        e.runtimeStyle.color = 'blue';
        alert('success');
        e.style.filter = '';
    }(this));
}
a { color: red; }

Здесь следует отметить несколько моментов.

Если вы просто используете другое свойство CSS, вы можете быть уверены, что выражение будет вычислено . Или, по крайней мере, немного более уверенно, потому что, если есть еще одно правило ниже по каскаду, которое уже использует то же свойство, вам все равно не повезло.

Во-вторых, вы должны использовать вместо этого runtimeStyle из currentStyle . Если вы использовали здесь currentStyle , второе правило все равно бы перезаписало его. runtimeStyle переопределяет все остальные CSS ( кроме ! Important объявлений ). Так что' s эквивалент JScript ! important .

Также обратите внимание, что я также сбрасываю само свойство filter . Это предотвращает постоянную повторную оценку выражения. Но насколько это может снизить производительность, я не думаю, что это критично. Основная причина, по которой я поместил это здесь, заключается в том, что я добавил в эти выражения alert () , а вы определенно не хотите, чтобы они всплывали вечно.

Это фактически также можно использовать любое другое свойство, которое вы создаете. Это тоже работает:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

Однако, поскольку свойство фиктивного на самом деле не существует, вы не можете сбросить его с помощью Javascript, поэтому это будет постоянно переоцениваться.

m также сбрасывает само свойство фильтра . Это предотвращает постоянную повторную оценку выражения. Но насколько это может снизить производительность, я не думаю, что это критично. Основная причина, по которой я поместил это здесь, заключается в том, что я добавил в эти выражения alert () , а вы определенно не хотите, чтобы они всплывали вечно.

Это фактически также можно использовать любое другое свойство, которое вы создаете. Это тоже работает:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

Однако, поскольку свойство фиктивного на самом деле не существует, вы не можете сбросить его с помощью Javascript, поэтому это будет постоянно переоцениваться.

m также сбрасывает само свойство фильтра . Это предотвращает постоянную повторную оценку выражения. Но насколько это может снизить производительность, я не думаю, что это критично. Основная причина, по которой я поместил его здесь, заключается в том, что я добавил в эти выражения alert () , а вы определенно не хотите, чтобы они всплывали вечно.

Это фактически также можно использовать любое другое свойство, которое вы создаете. Это тоже работает:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

Однако, поскольку свойство фиктивного на самом деле не существует, вы не можете сбросить его с помощью Javascript, поэтому это будет постоянно переоцениваться.

Не думаю, что это суперкритично. Основная причина, по которой я поместил это здесь, заключается в том, что я добавил в эти выражения alert () , а вы определенно не хотите, чтобы они всплывали вечно.

Это фактически также можно использовать любое другое свойство, которое вы создаете. Это тоже работает:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

Однако, поскольку свойство фиктивного на самом деле не существует, вы не можете сбросить его с помощью Javascript, поэтому это будет постоянно переоцениваться.

Не думаю, что это суперкритично. Основная причина, по которой я поместил его здесь, заключается в том, что я добавил в эти выражения alert () , а вы определенно не хотите, чтобы они всплывали вечно.

Это фактически также можно использовать любое другое свойство, которое вы создаете. Это тоже работает:

a {
    bogus: expression(function(e){
        e.runtimeStyle.color = 'blue';
    }(this));
}

Однако, поскольку свойство фиктивного на самом деле не существует, вы не можете сбросить его с помощью Javascript, поэтому это будет постоянно переоцениваться.

3
ответ дан 4 December 2019 в 23:40
поделиться

цвет: выражение ('красный')! Important;

2
ответ дан 4 December 2019 в 23:40
поделиться

Насколько я понимаю,! Important - это в основном эти дней как хакерство ... именно потому, что IE НЕ распознает его.

-3
ответ дан 4 December 2019 в 23:40
поделиться

Звучит больно и злобно, но:

color: expression((function (_this) {
    window.setTimeout(function () {
        _this.setAttribute("style", "color:" +
            (_this.parentNode.currentStyle ?
                _this.parentNode.currentStyle.color : 'red') + " !important";
    }, 0);
    return _this.parentNode.currentStyle ?
        _this.parentNode.currentStyle.color : 'red';
})(this));

Другими словами, это:

  1. Немедленно возвращает «красный» (или родительский цвет).
  2. Устанавливает тайм-аут, который устанавливает «красный! Важный» (или что-то еще) сразу после.

Имейте в виду, что это может привести к закрытию вашего браузера. Я не тестировал его, и все, что связано с выражениями CSS, имеет тенденцию к ужасным ошибкам.

1
ответ дан 4 December 2019 в 23:40
поделиться

Достопочтенный ppk из quirksmode проделал некоторую работу над CSS, JavaScript и ключевым словом ! Important . (Обратите внимание, что для тестирования в Firefox или любых других браузерах, отличных от IE, используйте cssRules вместо правил ниже.

Вот ссылка: Совместимость с W3C DOM

Очевидно, вы можете прочитать, важно ли правило стиля в таблице стилей, сделав это (это даст уровень важности свойства цвета во втором правиле CSS во второй таблице стилей, ВО ВСЕХ БРАУЗЕРАХ, ЗА ИСКЛЮЧЕНИЕМ MICROSOFT INTERNET EXPLORER. ] Как это для облома.

document.styleSheets[1].rules[1].style.getPropertyPriority('color')
//Returns important when the style is marked !important.
//Returns an empty string otherwise.

Теперь его исследование показывает еще один способ установить ! Important , к сожалению, это также очевидно работает только в браузерах, отличных от Internet Explorer.

// where x is a DOM element
x.style.setProperty('color','#00cc00','!important');
// Set the color of x or the second rule in the second style sheet to green.
document.styleSheets[1].rules[1].style.setProperty('color','#00cc00','!important');

Очевидно, этот странный синтаксис, если вы не устанавливаете значения ! important , необходимо установить третий параметр на null :

// where x is a DOM element
x.style.setProperty('color','#00cc00',null);
// Set the color of x or the second rule in the second style sheet to green.
document.styleSheets[1].rules[1].style.setProperty('color','#00cc00',null);

Теперь в MSDN есть свойство под названием « cssText », которое свисает с объекта стиля элемента DOM. Это даже указывает на то, что выражения CSS в порядке. Используется следующее:

x.style.cssText = 'color: #00cc00 !important';

Теперь это может быть важно (хех), на странице MSDN говорится (выделено мной):

Выражения DHTML могут использоваться вместо предыдущего значения (значений). Как Internet Explorer 8, выражения не поддерживаются в режиме IE8. За дополнительную информацию см. О динамическом Свойства .

Возможно, стоит также проверить ppk тесты cssText .

К сожалению, у меня нет соответствующих версий Windows Microsoft Internet Explorer, доступных на этом ноутбуке, но, возможно, это будет полезно. Мне любопытно, как это встряхивает, с этим я столкнулся (установка ! Important в JavaScript), но нашел другие способы обойти это, обычно просто перемещая классы или применяя специфичность с помощью ID в соответствующих селекторах.

Удачи в интересном вопросе!

1
ответ дан 4 December 2019 в 23:40
поделиться

Интерфейс IEqualityComparer имеет эти два метода:

bool Equals(T x, T y);
int GetHashCode(T obj);

Таким образом, хорошая реализация этого интерфейса будет реализовывать оба.

body #div1 {
    color:blue;
}

#div1 {
    color:red;/*stays blue, because 'body #div1' is more specific*/
    behaviorProp:color;/*specify styleproperty for the .htc*/
    behaviorValue:green;/*WILL become green, because the .htc sets it as an inline style, which has priority.*/
    behavior:url(inherit.htc);
}
2
ответ дан 4 December 2019 в 23:40
поделиться
Другие вопросы по тегам:

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