Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以用按钮开始下载dom元素吗?_Javascript_Svg_Dojo_D3.js - Fatal编程技术网

Javascript 可以用按钮开始下载dom元素吗?

Javascript 可以用按钮开始下载dom元素吗?,javascript,svg,dojo,d3.js,Javascript,Svg,Dojo,D3.js,我有一个在页面中生成的svg,我不是从外部源引入它。我希望这个svg可以下载打印。有没有办法(使用客户端Javascript)将dom节点下载为文本文件?对于这个项目,我仅限于使用dojo和d3库。假设客户机使用的是HTML5 web浏览器,使用s可以非常轻松地实现这一点。如果希望通过其他方式调用行为,但不必将节点附加到文档中,则需要在该元素上使用,但是在这里,设置 描述SVG的XML文本可以使用从其节点获取 请注意,任何“另存为”对话框将取决于客户端的配置 // assuming var `s

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

假设客户机使用的是HTML5 web浏览器,使用s可以非常轻松地实现这一点。如果希望通过其他方式调用行为,但不必将节点附加到文档中,则需要在该元素上使用,但是在这里,设置

描述SVG的XML文本可以使用从其节点获取

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

// 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);
//假设svg节点使用var`svg`
var a=document.createElement('a'),xml,ev;
a、 下载='my_svg.svg';//文件名
xml=(新的XMLSerializer()).serializeToString(svg);//将节点转换为xml字符串
a、 href='数据:应用程序/八位字节流;base64,“+btoa(xml);//创建数据uri
//构造,模拟鼠标点击它
ev=document.createEvent(“MouseEvents”);
ev.initMouseEvent(“单击”,真,假,自,0,0,0,0,假,假,假,假,假,假,0,空);
a、 调度事件(ev);

假设客户机使用的是HTML5 web浏览器,那么使用s就可以很容易地实现这一点。如果希望通过其他方式调用行为,但不必将节点附加到文档中,则需要在该元素上使用,但是在这里,设置

描述SVG的XML文本可以使用从其节点获取

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

// 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);
//假设svg节点使用var`svg`
var a=document.createElement('a'),xml,ev;
a、 下载='my_svg.svg';//文件名
xml=(新的XMLSerializer()).serializeToString(svg);//将节点转换为xml字符串
a、 href='数据:应用程序/八位字节流;base64,“+btoa(xml);//创建数据uri
//构造,模拟鼠标点击它
ev=document.createEvent(“MouseEvents”);
ev.initMouseEvent(“单击”,真,假,自,0,0,0,0,假,假,假,假,假,假,0,空);
a、 调度事件(ev);

SVG不是文件,而是在浏览器中使用d3.js生成的。我没有要引用的外部文件,只有一个domNode。所以您想知道如何从SVGSVGElement获取描述它的字符串吗?现在也在“如何做”中进行了编辑。@AdamSpurgin另外,数据URI实际上不需要在base64中,因为XML是一个字符串,但安全第一!换个哑剧也可以。我选择application/octetstream是因为即使浏览器不理解下载属性,它也应该开始下载(尽管您通常以散列作为文件名结束)。是否有其他方法指定文件名?从firefox中我得到的只是一个散列名,对我来说并不是一个真正的选项。这表明它可能是一些来源相同的东西使得它在firefox中出现?可能是在bugzilla上提交了一个bug。我试图使SVG可下载的不是文件,而是在浏览器中使用d3.js生成的。我没有要引用的外部文件,只有一个domNode。所以您想知道如何从SVGSVGElement获取描述它的字符串吗?现在也在“如何做”中进行了编辑。@AdamSpurgin另外,数据URI实际上不需要在base64中,因为XML是一个字符串,但安全第一!换个哑剧也可以。我选择application/octetstream是因为即使浏览器不理解下载属性,它也应该开始下载(尽管您通常以散列作为文件名结束)。是否有其他方法指定文件名?从firefox中我得到的只是一个散列名,对我来说并不是一个真正的选项。这表明它可能是一些来源相同的东西使得它在firefox中出现?可能在bugzilla上提交一个bug。因为我还没有时间完成我的答案,这里有更多信息的链接:。请注意,并非所有浏览器(例如没有IE10)都支持必需的功能,因为它们仍然是草稿。另请参见此处:。由于我没有时间完成我的回答,以下是有关进一步信息的链接:。请注意,并非所有浏览器(例如没有IE10)都支持必需的功能,因为它们仍然是草稿。另请参见此处:。