Подтвердить что ты не робот

IE не применяет динамически загружаемый CSS

Кажется, что IE (более старые версии, по крайней мере) не применяет CSS, который загружается динамически. Это может быть точкой боли, если вы загружаете страницу, содержащую CSS, через ajax в "lightbox" или "colorbox".

Например, скажем, что на вашей странице HTML есть div с именем "taco":

<style>#taco {color:green;}</style>
<div id="taco">Hola Mundo!</div>

"Хола Мундо!" будет зеленым, поскольку CSS был включен в исходную HTML-страницу. Затем появляется Javascript и добавляет его в "taco":

<style>#taco {color:green;}</style>
<div id="taco">
  Hola Mundo!
  <style>#burrito {color:red;}</style>
  <span id="burrito">mmmm burrito</span>
</div>

Во всех браузерах, кроме IE, шрифт буррито будет красным.

Так есть ли способ сделать это в IE? Кажется, что нет.

4b9b3361

Ответ 1

Тег style разрешен только в разделе head. Размещение его в другом месте просто недействительно и не имеет ничего общего с IE.

Дополнительная информация.

Кстати,, чтобы решить вашу проблему, если вы не можете поместить стили в глобальную таблицу стилей, вы можете использовать атрибут 'style' для изменения элементов:

<p style="...">

Или вы можете использовать iframe, но тогда вам нужно будет обслуживать целую страницу, а не только несколько тегов.

Ответ 2

Возможно, вы захотите начать использовать jQuery.CSS, который был изменен для динамических изменений стиля.

$("#jane").css('color', '#0F0');

Или просто простая jane Javascript:

document.getElementById['sally'].style.color = '#0F0';

EDIT:

Попросите ваш ajax вставить это:

<div id="jane">        
    <div id="sally">Hi, I'm Sally!</div>
    <script>document.getElementById['sally'].style.color = '#0F0';</script>
</div>

Или почему бы просто не вводить элементы со встроенными стилями, вычисленными на стороне сервера?:

<div id="jane">        
    <div id="sally" style="color:#0F0">Hi, I'm Sally!</div>
</div>

Ответ 3

Если этого не сделать, и вы не хотите менять код на стороне сервера, вот способ для элементов стиля очень простой:

// In the callback function, let assume you're using jQuery
success: function( data ) {

    // Create a dummy DOM element
    var el = document.createElement( 'div' );

    // Add the html received to this dummy element
    el.innerHTML = data;

    // so that you can select its html:
    var s = $( 'style', el ).text();

    // Delegate to another function, it going to get messy otherwise
    addRules( s );
}

function addRules( s ) {
    // First, separate your strings for each line
    var lines = s.split( '\n' ),

    // Declare some temporary variables
        id,
        rule,
        rules;

    // Then, loop through each line to handle it
    $.each( lines, function() {
        id = $( this ).split( ' ' )[ 0 ];

        // Get the rules inside the brackets, thanks @Esailija
        rules = /\{\s*([^}]*?)\s*\}/.exec( $( this ) )[ 1 ];

        // Split the rules
        rules = rules.split( ';' );

        $.each( rules, function() {
            rule = $( this ).split( ':' );

            // Apply each rule to the id
            $( id ).css( $.trim( rule[ 0 ] ), $.trim( rule[ 1 ] ) );
        } );
    } );
}

Итак, да, в основном я делаю парсер CSS.

Это синтаксический анализатор очень простой.

Он будет анализировать только следующие правила:

#some-id { some: rule; another: rule; }
#other-id { some: rule; yet: another; rule: baby; }

Ответ 4

Если вы загружаете связанную таблицу стилей динамически (через AJAX) на веб-страницу, IE < 8 даже не распознает тег LINK.

Если вы загружаете тег SCRIPT динамически IE < 8 не будет анализировать его.

Jeron корректен, единственный способ динамически загружать HTML и использовать его в стиле iframe, но я тестирую идею перепланировки контейнера.