Попытка чтения styleSheets возвращает неопределенное - PullRequest
1 голос
/ 16 мая 2011

Я искал ответ, и кажется, что решение не решает эту проблему, так что, надеюсь, конкретное указание поможет мне найти решение.

Я пытаюсь прочитать cssText первой таблицы стилей, используя document.styleSheets[0].cssText, но всегда возвращает undefined.У меня есть таблица стилей, и она заметно заметна, но JavaScript, похоже, ее не распознает.

Это, однако, сработало, когда я включил таблицу стилей в страницу с помощью <style>.Я не понимаю, почему это изменится при использовании <link>, хотя.Он не только помещается перед сценарием, но даже возвращает undefined при использовании javascript:alert(document.styleSheets[0].cssText) в омнибаре после полной загрузки страницы.

Спасибо за любую помощь.

Редактировать:Это относится к любому методу с document.styleSheets[0], включая те, которые должны работать в нескольких браузерах и работали для меня до использования <link>.Например: document.styleSheets[0].cssRules[0].selectorText

Ответы [ 2 ]

1 голос
/ 17 февраля 2014

Мне кажется, что этот ответ устарел, но может пригодиться кому-то еще.Результат может быть «неопределенным» по двум различным причинам:

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

b) После преодоления проблемы а) у вас может возникнуть другая проблема: правила, начинающиеся с @, например @import of @ font-face, как считаетсякак правила.Однако их «selectorText» не определен.Итак, у вас должен быть способ пропустить их.Я работаю над этим, прямо сейчас.Но я пока не нашел решения.В любом случае, это помогает узнать, как это происходит.

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

1 голос
/ 16 мая 2011

Согласно quirksmode.org , document.styleSheets[n].cssText поддерживается только в IE.

Форма

document.styleSheets[n].cssRules[m].cssText

кажется более широко поддерживаемым, так что вы можете просто зациклить его и построить строку из отдельных правил. (Хотя вы должны заменить cssRules на rules для IE).

...