gpt4 book ai didi

node.js - 如何使用 jsDom - node.js 操作 svg?

转载 作者:搜寻专家 更新时间:2023-10-31 23:48:33 30 4
gpt4 key购买 nike

我有以下 svg 文件

文件名: seatLayout.svg

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px" height="600px" viewBox="0 0 800 600" enable-background="new 0 0 800 600" xml:space="preserve">
<g id="111">
<rect x="130" y= "130" height="320" width="550" id="rect1" fill ="white" stroke="blue" > </rect>
</g>
</svg>

注意事项

技术/编程 - node.js

我想在 rect 元素内追加文本元素

 <text x="0" y="10" font-family="Verdana" font-size="55" fill="blue" > Hello </text>

我曾尝试使用 jsDOM实现。但它不起作用。

 jsdom.env('seatLayout.svg', function (errors, window) {
if(!errors){
console.log(window.document.getElementById("rect1"));
}
});

问题

它正在记录整个窗口对象而不是 rect 元素。

是否可以使用 jsDOM 来操作 svg? ?

任何建议将不胜感激

最佳答案

希望您正在寻找操纵 innerHTML你的rect1

注意:正如罗伯特·朗森指出的那样 SVG<circle> 这样的标签不能是 <rect> 的 child , 所以你也需要考虑这些事情 SVG .我不擅长SVG ,但以下是执行所需操作的 Node.js 代码。

Node.js 代码:

var strSVG = '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px" height="600px" viewBox="0 0 800 600" enable-background="new 0 0 800 600" xml:space="preserve">  <g id="111"> <rect x="130" y= "130" height="320" width="550" id="rect1" fill ="white" stroke="blue" >       </rect>  </g></svg>'
var strYourText = 'Hello';
var jsdom = require("jsdom");

jsdom.env({
html : strSVG,
done : function (errors, window) {
window.document.getElementById("rect1").innerHTML = strYourText;
console.log(window.document.getElementsByTagName('html')[0].innerHTML);
}
}
);


更新:以下代码可用于生成有效的 DOCTYPE 字符串。

var node = document.doctype;
var html = "<!DOCTYPE "
+ node.name
+ (node.publicId ? ' PUBLIC "' + node.publicId + '"' : '')
+ (!node.publicId && node.systemId ? ' SYSTEM' : '')
+ (node.systemId ? ' "' + node.systemId + '"' : '')
+ '>';

此方法返回 valid (HTML5) doctypes 的正确字符串,例如:

  • <!DOCTYPE html>
  • <!DOCTYPE html SYSTEM "about:legacy-compat">
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

代码解释:

node.name      # Holds the name of the root element, eg: HTML / html
node.publicId # If this property is present, then it's a public document type.
#>Prefix PUBLIC
!node.publicId && node.systemId
# If there's no publicId, but a systemId, prefix SYSTEM
node.systemId # Append this if present

关于node.js - 如何使用 jsDom - node.js 操作 svg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261890/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com