【问题标题】:element.getElementsByTagName is not a function error in jsPDFelement.getElementsByTagName 不是 jsPDF 中的函数错误
【发布时间】:2019-04-03 19:30:28
【问题描述】:

当我在以下对 jsPDF 的调用中使用 $('.mySelector').html() 而不是 document.body 时,我收到此错误:

element.getElementsByTagName 不是函数

如何在 jsPDF 中使用 jQuery 选择器?

<div class="mySelector">
  <p>HTML content...</p>
</div>
<button onclick="pdfDowload();">PDF</button>
function pdfDowload() {
  var pdf = new jsPDF('p', 'pt', 'a4');
  pdf.addHTML(document.body, function() {
    pdf.save('report.pdf');
  });
}

【问题讨论】:

    标签: jquery jspdf html2canvas


    【解决方案1】:

    下载后添加$('.mySelector').get(0)此代码我得到空白页。但是我在下面的代码中使用pdf.fromHTML 解决了这个问题,而不是pdf.addHTML

    function pdfDowload() {
        var pdf = new jsPDF('p', 'pt', 'a4');
        pdf.fromHTML($('.mySelector').html());
        pdf.save('report.pdf');
    
    }
    

    【讨论】:

      【解决方案2】:

      错误是因为,根据documentation,jsPDF 期望提供给该函数的参数是元素对象,而不是字符串。

      要解决此问题,您可以使用 get() 从 jQuery 对象中检索基础元素:

      function pdfDowload() {
        var pdf = new jsPDF('p', 'pt', 'a4');
        pdf.addHTML($('.mySelector').get(0), function() {
          pdf.save('report.pdf');
        });
      }
      

      另请注意,文档指出此 addHTML() 方法已弃用。您应该遵循他们的指南来更新您的方法。

      【讨论】:

      • 你能给我一个jsfiddle链接吗?因为下载内容后没有显示@Rory McCrossan
      • 我无法为此设置一个小提琴,因为它是一个相当复杂的示例。但是,您应该能够调试它。 $('.mySelector') 返回什么?如果 DOM 中有多个 .mySelector 元素,则需要循环遍历它们,例如
      • 它应该显示“HTML 内容...”内容,但在下载的 pdf 文件中不显示,变为空白
      【解决方案3】:

      试试这个:

      $('.mySelector').get(0)
      

      不要使用.html()

      编辑: 尝试添加一个短暂的停顿:

      pdf.addHTML($('.mySelector').get(0),function() {
            setTimeout(function() {
              pdf.save('report.pdf');
            },1000);
      )};
      

      【讨论】:

      • 下载@ChrisBE后仍然显示空白
      • 能在addHTML函数前显示jsPDF相关的代码行吗?
      猜你喜欢
      • 2021-12-13
      • 2017-11-02
      • 2018-11-11
      • 2017-11-27
      • 2019-01-23
      • 2017-11-13
      • 2020-07-03
      • 2021-03-28
      • 2018-03-13
      相关资源
      最近更新 更多