#javascript #undefined #stylesheet
#javascript #неопределенный #таблица стилей
Вопрос:
Я искал ответ, и, похоже, никакое решение не устраняет эту проблему, поэтому, надеюсь, конкретная формулировка поможет мне найти решение.
Я пытаюсь прочитать cssText первой таблицы стилей с помощью document.styleSheets[0].cssText
, но он всегда возвращает undefined
. У меня действительно есть таблица стилей, и это заметно, но JavaScript, похоже, не распознает ее.
Однако это сработало, когда я включил таблицу стилей на страницу с помощью <style>
. Однако я не понимаю, почему это могло измениться при использовании <link>
. Оно не только помещается перед скриптом, но даже возвращается undefined
при использовании javascript:alert(document.styleSheets[0].cssText)
в omnibar после полной загрузки страницы.
Спасибо за любую помощь.
Редактировать: Это относится к любому методу с document.styleSheets[0]
, включая те, которые должны работать в нескольких браузерах и работали у меня до использования <link>
. Например: document.styleSheets[0].cssRules[0].selectorText
Ответ №1:
Согласно quirksmode.org , document.styleSheets[n].cssText
поддерживается только в IE.
Форма
document.styleSheets[n].cssRules[m].cssText
кажется, поддерживается более широко, так что вы могли бы просто перебрать это и создать строку из отдельных правил. (Хотя для IE вам придется заменить cssRules
на rules
).
Комментарии:
1. Однако это сработало, когда был использован
<style>
тег. Многие из примеров в quirksmode также работали в моем веб-браузере.2. Я мог бы поклясться, что это поддерживалось не только IE.
Ответ №2:
Я думаю, что этот ответ не ко времени, но он может быть полезен для кого-то другого. Результат может быть «неопределенным» по двум разным причинам:
a) В некоторых браузерах свойство «cssRules» не работает (в соответствии с http://www.javascriptkit.com/domref/cssrule .shtml, поддерживается только в NS / Firefox). Вместо этого для другого браузера вам следует использовать свойство «rules».
Вы можете решить проблему, используя что-то вроде:
if (document.styleSheets[0].cssRules)
crossrule=document.styleSheets[0].cssRules[0]
else if (document.styleSheets[0].rules)
crossrule=document.styleSheets[0].rules[0]
для извлечения правила и, впоследствии, для извлечения имени селектора:
document.styleSheets[0].cssRules[0].selectorText
б) После устранения проблемы а) у вас может возникнуть другая проблема: правила, начинающиеся с @, такие как @import of @font-face, рассматриваются как правила. Однако их «selectorText» не определен. Итак, у вас должен быть способ пропустить их. Я работаю над этим прямо сейчас. Но я еще не нашел решения. В любом случае, это помогает узнать, как это происходит.
Надеюсь, это поможет