0

在 jquery 中使用 "this" 和 ".parent()" 当它经过简单的 div 或数据表时会有点混乱。我有一个具有以下结构的表:(我无法重命名任何类或 id)

<table class="table1">
    <tbody>
        <tr>
            <div class="detail">
                <table>
                     <thead></thead>
                     <tbody>
                         <tr>
                            <td>
                                <img class="picture_open" src="../location">
</td></tr></tbody></table></div></tr></tbody></table>

我想要做的是在该 img 上有一个点击功能,它能够获取完整的 RowElement。

我现在拥有的:

$(".table1 tbody tr td img.picture_open").live('click', function () {
    var overallTable = jQuery(this).parent("table").dataTable();
    console.log("overallTable: " + overallTable);
    var elementRow = this.parentNode.parentNode;
    console.log("elementRow: " + elementRow);

    var rowData = overallTable.fnGetData( elementRow );
    console.log("rowData: " + rowData);
    if ( this.src.match('img_name') )
    {
        //kills the table that was created if that row is opened
    }
    else
    {
        //runs ajax call to create another table since row is NOT opened
    }
} );

但是我上面的代码打印出:overallTable: [object Object] elementRow: [object HTMLTableRowElement] TypeError: 'null' is not an object (evalating 'oSettings.aoData')

我的问题是 $(this) 不正确吗?(没有得到类“picture_open”的img)或者我的overallTable变量设置不正确与.parent()?还是我的 elementRow 变量与 parentNode 设置不正确?澄清我的错误的任何帮助都将是惊人的。

谢谢!

4

5 回答 5

1

parent()在 jQuery 中只会解析上一层 DOM,你应该使用.parents()/.closest(). 这将解决您的问题。

注意: 在最新的 jQuery 版本.live()中变成了。.on()更好用.on()/.click()

于 2013-09-04T18:28:52.417 回答
0

您需要使用.closest('table')查找最近的表

类似地找到元素行

var elementRow = $(this).closest('tr');
于 2013-09-04T18:27:53.247 回答
0

尝试这个 :

$('.table1').on('click', '.picture_open', function(ev) {
    this // is .picture_open element
    ev.target // is .picture_open element
    ev.delegateTarget // is .table1 element

    var $row = $(ev.delegateTarget).find('.detail tr').first();
});
于 2013-09-04T18:30:10.007 回答
0

parent()在 jQuery 中只将 DOM 上移一级,所以你可能想要的是parents('table'). 这应该可以解决您的整体表问题。

于 2013-09-04T18:24:54.240 回答
0

在 jQuery 中,.parent()只会在 DOM 中上升一次。你应该使用什么.parents()来查找 DOM 直到找到table

于 2013-09-04T18:25:12.767 回答