CSS rules utilities

functions allowing to get the CSS rules applied to an element

目前為 2020-01-27 提交的版本,檢視 最新版本

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/394970/768130/CSS%20rules%20utilities.js

  1. // ==UserScript==
  2. // @name CSS rules utilities
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description functions allowing to get the CSS rules applied to an element
  6. // @author CoStiC
  7. // @match *://*/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. function findCssRules(el) {
  12. var sheets = document.styleSheets, ret = [];
  13. el.matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector;
  14. for (var i in sheets) {
  15. var rules = sheets[i].rules || sheets[i].cssRules;
  16. for (var r in rules) {
  17. if (el.matches(rules[r].selectorText)) {
  18. ret.push(rules[r].cssText);
  19. }
  20. }
  21. }
  22. return ret;
  23. }
  24.  
  25. function modCssRules(el, newRule, frDoc) {
  26. if (!frDoc) frDoc = window.document;
  27. var elHover = "";
  28. var sheets = frDoc.styleSheets;
  29. if (el !== null) {
  30. el.matches = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector;
  31. for (var sheet in sheets) {
  32. var rules = sheets[sheet].rules || sheets[sheet].cssRules;
  33. for (var rule in rules) {
  34. if (rules[rule].type === 1) {
  35. if (el.matches(rules[rule].selectorText)) {
  36.  
  37. let oldRulesList = rules[rule].style.cssText,
  38. oldRules = oldRulesList.split(";"),
  39. newRulesList = "";
  40. oldRules.pop();
  41.  
  42. for (let newProp in newRule.cssNormal) {
  43. el.style[newProp] = newRule.cssNormal[newProp];
  44. for (let oldRule of oldRules) {
  45. oldRule = oldRule.trim();
  46. let oldProp = oldRule.split(":")[0];
  47. if (oldProp === newProp) {
  48. newRulesList += newProp + ":" + newRule.cssNormal[newProp] + ";";
  49. el.style[newProp] = newRule.cssNormal[newProp];
  50. } else {
  51. newRulesList += oldRule + ";";
  52. };
  53. }
  54. rules[rule].style.cssText = newRulesList;
  55. }
  56.  
  57. if (typeof newRule.cssHover !== 'undefined') {
  58. var rul = "";
  59. for (let propHover in newRule.cssHover) {
  60. rul += `${propHover}:${newRule.cssHover[propHover]} !important;`;
  61. };
  62. elHover = `${rules[rule].selectorText}:hover{${rul}}`;
  63. }
  64. } else {};
  65. }
  66. }
  67. }
  68. }
  69.  
  70. if (elHover !== "") {
  71. let newHoverStyle = document.createElement('style'),
  72. hoverRule = document.createTextNode(elHover);
  73. newHoverStyle.appendChild(hoverRule);
  74. document.head.appendChild(newHoverStyle)
  75. //sheets[sheets.length - 1].insertRule(elHover);
  76. };
  77. }