Как убедиться, что JQuery динамически внедряет CSS правильно и готов к использованию? - PullRequest
0 голосов
/ 02 апреля 2011

Я знаю, что могу сделать это, чтобы внедрить CSS следующим образом:

$(document).ready(function() {
    $("a").click(function() {
        $('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');
    });
});

Но этот асинхронный.т.е. даже я добавляю ссылку, нет никакой гарантии, что CSS доступен в то время.(из-за загрузки CSS), поэтому, если одновременно выполняется еще один js и попытается присвоить класс, то 1) Будет ли он работать?Будет ли CSS применяться позже после полной загрузки файла?

Если нет, есть ли что-то вроде обратного вызова или какой-то трюк, который я могу использовать, чтобы узнать, что css полностью загружен?

1 Ответ

2 голосов
/ 02 апреля 2011

Если вам нужна гарантированная загрузка и CSS определенно находится в том же домене, вы можете запросить содержимое через Ajax, а затем ввести свойства напрямую.

Мне посчастливилось сделать это (по крайней мере в iOS), создав фиктивный элемент <link> в <head> и вызвав text() для него с содержимым файла CSS (в виде строки).

Например, примерно:

 $("a").click(function() {
        $.get('style2.css', function (data) { 
            $('link').text(data);
            // Stuff that must happen after CSS injection here
        });
    })

Но, честно говоря, это редкий случай использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...