在調用window.getComputedStyle
後,如何判斷樣式是否來自頁面本身(而不是來自瀏覽器)?我有興趣在純JavaScript中這樣做,但我會解決在附加內容中運行的解決方案。檢測樣式是否是用戶樣式
0
A
回答
1
你將很難找出getComputedStyle
給你的規則來自哪裏。請注意,MaxArt提供的代碼不是一個完整的解決方案 - 也有繼承的樣式,因此必須爲父節點重複所有操作。在簡單的方法是使用inIDOMUtils.getCSSStyleRules()
,沿着這些線路:
function isPageStyle(styleSheet)
{
if (styleSheet.ownerNode)
return true;
if (styleSheet.ownerRule instanceof Components.interfaces.nsIDOMCSSImportRule)
return isPageStyle(styleSheet.parentStyleSheet);
return false;
}
var domUtils = Components.classes["@mozilla.org/inspector/dom-utils;1"]
.getService(Components.interfaces.inIDOMUtils);
var rules = domUtils.getCSSStyleRules(element);
for (var i = 0; i < rules.Count(); i++)
{
var rule = rules.GetElementAt(i);
if (isPageStyle(rule.parentStyleSheet))
alert(rule.cssText);
}
你將不得不做它的父節點爲好。對於一個完整的例子,你可以看看implementation of the Inspector feature in Firefox(isPageStyle
函數在我的答案中無恥地從here「借來」)。
0
除非你想解析文檔中的每個樣式表,否則你不能。如果您在默認情況下每個瀏覽器都適用於元素的樣式有問題,則可以依賴諸如重置CSS之類的內容。
如果你想解析樣式表,反正你可以做這樣的事情:
function isDefaultStyle(element, property) {
if (element.style[property]) return false;
for (var i = 0; i < document.styleSheets.length; i++) {
for (var j = 0, r; j < document.styleSheets[i].cssRules.length; j++) {
r = document.styleSheets[i].cssRules[j];
if (element.matchesSelector(r.selectorText) && r[property]) return false;
}
}
return true;
}
matchesSelector
是實際上沒有任何瀏覽器,這實際上支持命名空間像webkitMatchesSelector
功能支持的元素方法,mozMatchesSelector
,oMatchesSelector
,甚至msMatchesSelector
(IE9 +)。不幸的是,對於IE8,你必須模擬它,並且我無法找到比檢查元素是否包含在document.querySelectorAll(r.selectorText)
中更好的東西,這對於大型DOM樹來說可能非常緩慢。
在這最後一種情況下,您顯然必須使用rules
而不是cssRules
。
相關問題
- 1. 是否有C++的樣式檢查器?
- 2. 檢測樣式表是否無法加載(不適用於Firefox)
- 3. Javascript是否有'Instruments'樣式採樣器?
- 4. 在樣式表中添加*是否將樣式應用於IE
- 5. iphone檢測新樣式表
- 6. jquery和創建樣式,如何檢查樣式是否已經存在
- 7. 什麼是用戶代理樣式表
- 8. 是否可以將.classA樣式轉換爲.classB樣式?
- 9. 檢查段落字體樣式是否是斜體?
- 10. 檢查cookie是否使用css樣式啓用
- 11. 測試設備是否啓用了Flash,Modernizr樣式
- 12. 使用XSL樣式表測試值是否爲空XML
- 13. 如何檢查Selenium IDE中是否應用了樣式
- 14. 檢查div是否應用了特定樣式
- 15. ActionScript 3,檢查字體樣式是否可用
- 16. 檢測何時禁用樣式
- 17. 檢查用戶名是否存在,如果是這樣,一個
- 18. 是否有GetThemeColor /視覺樣式API
- 19. CSS樣式的順序是否重要?
- 20. 是否有任何Delphi XE2樣式庫?
- 21. TabBarIOS是否只有圖標樣式?
- 22. 是否有XAML/WPF/Silverlight樣式指南?
- 23. UIComponent上是否有樣式代理?
- 24. Svelte是否促進動態CSS樣式?
- 25. css類不應用樣式,但id是應用樣式?
- 26. 是否有原因CSS不支持從樣式中應用樣式?
- 27. 是否有T-SQL的樣式檢查工具,就像FxCop到.net一樣?
- 28. Rspec-rails:測試佈局是否包含樣式或javascript
- 29. 檢測拉姆達是否是這樣的方法參考
- 30. 檢測@keyframes規則是否存在而沒有迭代所有樣式表?
不是我想聽到的,但它解釋了我需要做的事情。 – Brian