insertBefore()的问题

时间:2011-07-17 17:30:41

标签: javascript jquery

我有一个小对象,它必须在表中添加新行。在大多数情况下它工作正常,但是如果某些行中有一个表(在“根”表中),则该对象不会附在正确的桌子上!?

我一直在做一些调试,发现一切都出错了。如果设置了DEBUG并且省略了insertBefore()的行,那么对象会附加到正确的表

var List = new function(){
    this.append_row = function(row, tbl, index){
        if(DEBUG){
            index = -1;
        }

        if(index == 0){
            row.prependTo(tbl);
        }
        else if(index > 0){
            var elm = $('tr', tbl);
            if(elm.length > index){
                row.insertBefore(elm.eq(index)); // the issue is in this line
            }
            else{
                row.appendTo(tbl);
            }
        }
        else{
            row.appendTo(tbl);
        }
    };
}

1 个答案:

答案 0 :(得分:2)

这是因为:

var elm = $('tr', tbl);

......等同于:

var elm = $(tbl).find('tr');

因此,它将在任何嵌套的<tr>中找到所有嵌套的<table>元素。

所以你可以这样做:

var elm = $(tbl.rows); // if `tbl` is the DOM element

或者这个:

var elm = $(tbl[0].rows); // if `tbl` is a jQuery object

现在elm只能引用rows的{​​{1}},而不是任何嵌套的tbl元素。