#javascript #jquery
#javascript #jquery
Вопрос:
Я загружаю файл CSS динамически после запуска document.ready
функции. Это то, что у меня есть:
$.get(TheCSSTag.href, function () {
alert('loaded');
DoSomething();
}, "text/css");
Проблема в том, что предупреждение срабатывает нормально (что, я полагаю, означает загруженный CSS), но стили не применяются к элементам HTML.
Примечание: другие решения, которые включают создание тега CSS и добавление в DOM, подобные этому document.getElementsByTagName('head')[0].appendChild(TheCSSTag);
, не работают для меня, потому что мне нужна функция обратного вызова для выполнения при загрузке файла CSS.
Комментарии:
1. В вашем коде нет ничего, что показывало бы, что CSS добавляется в документ, или
$.get()
делает это, если вы добавляете"text/css"
туда?2. Загрузка файла CSS динамически обычно является плохой идеей. Чего вы пытаетесь достичь?
3. @AnthonyGarcia: css загружается с клиента в зависимости от разрешения экрана.
4. @frenchie: Вы рассматривали медиа-запросы ?
5. @AnthonyGarcia: нет, имя CSS определяется во время выполнения. Медиа-запросы не будут работать для этого.
Ответ №1:
Дело в том… На самом деле вы не указываете браузеру использовать CSS. Вы просто просите jQuery получить это для вас. Внутри обратного $.get
вызова вам нужно фактически внедрить его на свою страницу.
Вот пример использования jQuery, в котором вы читаете все и помещаете его в style
тег внутри head
:
$.when($.get('your_css_file.css')).done(function (response) {
$('<style />').text(response).appendTo($('head'))
})
Другим способом было бы просто добавить URL-адрес в заголовок:
$('<link /')
.attr('type', 'text/css')
.attr('rel', 'stylesheet')
.attr('href', 'your_css_file.css')
.appendTo($('head'))
Ответ №2:
Вам нужно добавить файл CSS на страницу. $.get()
не сделает этого за вас.
$.get(TheCSSTag.href, function(){
$('<link>', {rel:'stylesheet', type:'text/css', 'href':TheCSSTag.href}).appendTo('head');
alert('loaded');
DoSomething();
}, "text/css");
Пожалуйста, обратите внимание: без разрешений xdomain $.get будет загружать только локальные файлы, хотя вы можете просто добавить их в head, не используя сначала $.get .