1

我有这样的代码。当我在函数中使用硬编码的 jquery 对象时,一切正常。但是当我想将它传递给函数调用时,我的函数无法识别 jquery 对象并且未绘制表。

// This is a function that draws a table.
// I pass it the following params:

        drawTbl({
            tbody: $("#tbl tbody"),  // <tbody> element, jq object, This doesn't work.
            tblElem: null,
            tblTmpl: null,
            tblContTmpl: "cont_tmpl", // id of a jQuery template
            justAll: res.justAll,  // some data for a table
        });


// This is a function declaration
// It doesn't draw a table if I pass tbody as a jquery object.
// But works if I hard code tbody 
drawTbl = function(drawTblParams) {

    drawTblParams.tbody.empty();


    // Loop to draw a table with jquery template
    for (var m in drawTblParams.justAll) {

        // This doesn't work, content isn't appended to tbody
        $.tmpl( drawTblParams.tblContTmpl, { i: drawTblParams.justAll[m] }).appendTo( drawTblParams.tbody );

        // This works fine, content is appended to tbody
        $.tmpl( drawTblParams.tblContTmpl, { i: drawTblParams.justAll[m] }).appendTo( $("#tbl tbody") );
    }

    // The most ridiculous thing
    // This returns false! But it has to be the same element!
    console.log(drawTblParams.tbody == $("#tbl tbody"));

};

为什么 jq-object 失去了它的价值?如何安全地将 jquery 对象传递给函数?

4

2 回答 2

1

如此处所述,您必须比较原始 DOM 元素(与 jQuery 包装的元素相对)以确定相等性。这就是为什么您在控制台中变得错误的原因。

我认为你可以解决你的问题,如果你简单地 re-jQuery-ify (?) 方法中的对象,如下所示:

$(drawTblParams.tbody).empty();

代替:

drawTblParams.tbody.empty();

在你的整个方法中等等。

于 2013-08-24T19:23:19.067 回答
0

我知道出了什么问题。我也动态生成<table>。我在生成 adrawTbl之前进行了函数调用<table>。因此,当我将 jQuery<tbody>元素传递给函数调用时,DOM 中没有任何<tbody>元素。

我这样解决了这个问题:

drawTbl({
   tbody: "#tbl tbody",  // I pass a string instead of a jQuery object
   tblElem: null,
   tblTmpl: null,
   tblContTmpl: "cont_tmpl", // id of a jQuery template
   justAll: res.justAll,  // some data for a table
});

在函数声明中,我添加了if

drawTbl = function(drawTblParams) {

    // I generate a <table> before. So <tbody> is generated only now, not in the function call.
    drawTblParams.tblElem.html( $.tmpl(drawTblParams.tblTmpl) );

    // Here I check if drawTblParams.tbody is a string and convert it to jq object
    if(typeof drawTblParams.tbody == "string")
       drawTblParams.tbody = $(drawTblParams.tbody);

    // Now it exists
    drawTblParams.tbody.empty();

    ...

};
于 2013-08-24T22:07:04.297 回答