Node.CloneNode() 不是函数 -dom-to-image.js.



我想在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 不是一个函数"的文章。

最新更新