javascript - 是否可以通过按钮开始下载 dom 元素?

标签 javascript svg dojo d3.js

我有一个在页面中生成的 svg,我不是从外部源引入它。我希望这个 svg 可下载用于打印。有没有办法(使用客户端Javascript)将dom节点下载为文本文件?我仅限于该项目的 dojo 和 d3 库。

最佳答案

假设客户端使用 HTML5 Web 浏览器,则可以使用 <a> 轻松实现此目的。 download attribute 。您需要simulate a clickMouseEvent如果您希望通过其他方式调用该行为,但不必将该节点附加到文档中,则可以在此元素上添加该节点。 I've answered a similar question about this before ,但在这里设置 <a> s href 到 svg 的文件位置,除非它是动态创建的 - 在这种情况下,您可以对描述它的文本进行编码以创建 data URI .

描述 SVG 的 XML 文本可以从它的 SVGSVGElement 中获取。节点使用 XMLSerializer .

var serializer = new XMLSerializer();
serializer.serializeToString(svg); // xml string for `svg` (your node)

请注意,任何“另存为”对话框都将取决于客户端的配置。

// assuming var `svg` for your SVG node
var a = document.createElement('a'), xml, ev;
a.download = 'my_svg.svg'; // file name
xml = (new XMLSerializer()).serializeToString(svg); // convert node to xml string
a.href = 'data:application/octet-stream;base64,' + btoa(xml); // create data uri
// <a> constructed, simulate mouse click on it
ev = document.createEvent("MouseEvents");
ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(ev);

关于javascript - 是否可以通过按钮开始下载 dom 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14632069/

相关文章:

javascript - D3 - 在半饼图/半圆环图上放置标签和线条

构建 dojo 时出现 css 语法错误

javascript - 具有最接近方法的 dojoquery 在 Internet Explorer 中不起作用

javascript - 如何让 "unset"Dojo datetextbox默认?

javascript - 如何更新 Recoil.js 外部组件中的原子(状态)? ( react )

javascript - 合并 Mongoose 中的两个对象

html - Firefox 在读取内联 SVG 中的 #hex 颜色代码时抛出错误

javascript - 第二张图像的 onclick 应该变为事件状态(即进行 next() 调用)

javascript - 在客户端搜索、排序和分页大型数据集

react-native - onPress 无法使用 react-native-svg 在 iOS 上处理 SVG 路径