Попытка прочитать таблицы стилей возвращает неопределенное значение

#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» не определен. Итак, у вас должен быть способ пропустить их. Я работаю над этим прямо сейчас. Но я еще не нашел решения. В любом случае, это помогает узнать, как это происходит.

Надеюсь, это поможет