You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ID克隆HTML div并移除CSS类时出现Invalid source错误

解决"Invalid source - please specify an HTML Element or string"错误

这个错误的根源是你误用了jQuery的remove()方法的返回值,我来帮你一步步理清问题:

问题分析

你代码里的这一行:

var newt = $(cont).find(".masteredit").remove();

remove()方法的作用是从DOM中移除匹配到的元素,但它返回的是被移除的那些元素,而不是移除操作完成后剩下的父容器(也就是你克隆的#element-to-print)。所以你传给html2pdf的newt其实是一堆被删掉的.masteredit元素,这显然不符合html2pdf对源参数的要求,自然就抛出了"Invalid source"错误。

另外你的代码末尾还有个语法错误:多了两个闭合括号)),这也会导致代码运行异常。

修复方案

你只需要先完成移除操作,然后把处理后的克隆容器传给html2pdf就行,不需要把remove()的返回值赋值给变量。具体修正如下:

document.getElementById("btnPrint").onclick = function() { 
    // 克隆目标div,这里cont已经是jQuery对象,不用再套$(cont)
    var cont = $('#element-to-print').clone(); 
    // 直接在克隆对象上移除指定类的元素,操作完成后cont就是处理好的容器
    cont.find(".masteredit").remove(); 
    // 把处理后的cont传给html2pdf
    html2pdf(cont, { 
        margin: 0.25,
        filename: $scope.defendantHeader.firstName + "-" + $scope.defendantHeader.lastName + "-" + $scope.defendantHeader.activeFileNumber,
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { dpi: 192, letterRendering: true },
        jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' },
    }); 
}

额外说明

  • 因为$('#element-to-print').clone()返回的已经是jQuery对象,后续操作不需要再用$(cont)包裹,直接调用find()方法即可。
  • 确保$scope.defendantHeader下的属性都有正确的值,避免生成的文件名出现异常。

内容的提问来源于stack exchange,提问作者mayur gawande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:38:51