代码之家  ›  专栏  ›  技术社区  ›  Sandeep Thomas

对象在尝试使用JQUERY获取html元素的宽度时可能是“未定义的”

  •  1
  • Sandeep Thomas  · 技术社区  · 4 年前

    我正在尝试使用JSPDF将一个表转换为具有多个页面的PDF。因此,作为其中的一部分,我正在尝试获取html的宽度和高度

    var HTML_Width = $("#pdfTable").width();
    var HTML_Height = $("#pdfTable").height();
    var top_left_margin = 15;
    var PDF_Width:number = HTML_Width+(top_left_margin*2);
    

    但在上面的代码片段中,HTML_宽度显示对象可能未定义。

    enter image description here

    1 回复  |  直到 4 年前
        1
  •  2
  •   T.J. Crowder    4 年前

    如果没有具有 id pdfTable $() 将返回一个空jQuery对象,并调用 width height 在该空对象上,将返回 undefined . 因此,它们的返回类型是 number | undefined .

    如果你 知道 (或者更确切地说, )如果该元素将存在,您可以在代码中记录该元素,并在未满足该期望时抛出错误,以确保TypeScript安全,如下所示:

    var HTML_Width = $("#pdfTable").width();
    var HTML_Height = $("#pdfTable").height();
    if (typeof HTML_Width === "undefined" || typeof HTML_Height === "undefined") {
        throw new Error(`Expected element with id="pdfTable"`);
    }
    var top_left_margin = 15;
    var PDF_Width:number = HTML_Width+(top_left_margin*2);
    

    您也可以使用 non-nullish assertion operator !

    // I don't recommend this
    var HTML_Width = $("#pdfTable").width()!;
    //                                     ^
    var HTML_Height = $("#pdfTable").height()!;
    //                                       ^
    var top_left_margin = 15;
    var PDF_Width:number = HTML_Width+(top_left_margin*2);
    
    推荐文章