我想在angularjs
中创建一个HTML页面的.png文件并下载它。为此,我目前正在使用dom-to-image.js
并使用domToImage.toBlob
函数并将节点元素传递给它。但是在内部,当它进入dom-to-image.js
时,它会抛出错误:
node.cloneNode(( 不是一个函数
任何人都可以在这里帮助我吗?
谢谢
当您尝试在单个 DOM 节点以外的任何节点上调用cloneNode()
时,会出现此错误。
在这种情况下,错误来自dom-to-image
库,该库在内部调用该方法。
请注意,如果没有代码片段,很难确定代码的确切问题,但关键是,当您调用domtoimage.toBlob()
时,您需要提供单个 DOM 节点。
因此,请仔细检查您用什么来称呼它。例如,如果您按class
进行选择,则最终可能会得到多个元素。
最佳做法是精确地使用哪个节点转换为 blob - 使用id
属性,如下所示:
domtoimage.toBlob(document.getElementById('element')).then(...)
其中element
是目标节点的id
。
您也可以选择angular.element()
,甚至直接使用jQuery
。
在这两种情况下,这将返回一个Object
- 您无法调用cloneNode()
。
另请注意 Angular 文档中的以下内容angular.element()
:
注意:AngularJS中的所有元素引用总是用jQuery或jqLite包装(例如指令的compile/link函数中的元素参数(。它们从来都不是原始的 DOM 引用。
这意味着您会在这两种情况下观察到相同的行为,例如:
domtoimage.toBlob($('#element')).then(...)
domtoimage.toBlob(angular.element('#element')).then(...)
会导致您看到的错误。您可以在将Object
提供给domtoimage.toBlob()
之前对其进行索引,也许如下所示:
domtoimage.toBlob($('#element')[0]).then(...)
domtoimage.toBlob(angular.element('#element')[0]).then(...)
那也行得通。
另请查看这篇关于"cloneNode 不是一个函数"的文章。