css - 使用 JSDOM 编辑 CSS 样式表
问题描述
我正在尝试对从 Adobe Illustrator 导出的 SVG 文件进行一些预处理,以便以后在网络上使用。但是我在编辑一些 CSS 规则时遇到了一些问题。
我有这样的 SVG 文件:
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 2222.68 1406.5" style="enable-background:new 0 0 2222.68 1406.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#A0A09F;stroke-miterlimit:10;}
.st1{fill:#E2E2E1;}
/*more rules*/
</style>
/*<g>s, <path>s and other SVG elements*/
</svg>
我可以在浏览器中打开它并在控制台上执行以下操作:
const styleSheet = document.styleSheets[0];
或者,我可以这样做:
const svgElement = document.body.children[0];
const styleElement = svgElement.children[0];
const styleSheet = styleElement.sheet;
在这两种情况下,我都可以从“styleSheet”中读取“cssRules”属性并操作 SVG 文件中定义的所有规则。当我使用 JSDOM 尝试相同的事情时,我无法访问样式表。document.styleSheets 属性的长度为 0,样式标签没有 sheet 属性(但我可以将其所有规则视为带有 innerHTML 的文本)。
const jsdom = require("jsdom");
const fs = require("fs");
const { JSDOM } = jsdom;
const svgFile = fs.readFileSync("myFile.svg").toString();
const dom = new JSDOM(svgFile);
const document = dom.window.document;
const styleSheet = document.styleSheets[0]; //doesn't work, length is 0
const svgElement = document.body.children[0];
const styleElement = svgElement.children[0];
const styleSheet = styleElement.sheet; //sheet is undefined
无论如何可以使用 JSDOM 访问此规则吗?其他操作,例如向元素添加类和 data-* 属性,可以在 JSDOM 中正常工作。
节点版本:14.7.1
JSDOM 版本:16.6.0
解决方案
推荐阅读
- mysql - ORA-00904: Oracle SQL 中的标识符无效
- javascript - Javascript图表未加载
- javascript - 显示存储在数组中的事件
- c++ - 为什么对模板化函数有模棱两可的调用?
- reactjs - CKEditor 更新 React 状态
- java - 服务器端渲染 Spring 和 Vue.js
- javascript - Nuxt vuex状态菜单列表:组件中未定义
- javascript - Escape 按键不适用于 vuejs 中的第二个模态窗口
- laravel - 如果两个外键匹配,如何在多对多关系中找到速率?
- r - 通过闪亮的应用程序运行 bat 文件时的进度条