2013-09-04 4 views
0

jquery에서 "this"및 ".parent()"를 사용하면 간단한 div 또는 datatables를 지나칠 때 약간 혼란스러워집니다. 나는 다음과 같은 구조의 테이블을 가지고 :JQuery .parent click

<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에 클릭 기능을 가지고있다 (필자는 클래스 또는 ID의 이름을 바꿀 수 없습니다) 완전한 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 
    } 
}); 

: [개체 개체] elementRow : [객체 HTMLTableRowElement] 형식 오류 : '널 (null)'는 객체가 아닌 는 overallTable ('oSettings.aoData'평가)

내 문제는 $ (this)가 잘못 되었습니까? ("picture_open"클래스로 img를 가져 오지 못합니다) 또는 내 overallTable 변수가 .parent()로 잘못 설정 되었습니까? 또는 내 elementRow 변수가 parentNode로 잘못 설정 되었습니까? 내 오류를 명확히하는 데 도움이 될 것입니다.

감사합니다.

+1

을 내가 사용하려는 생각 ((http://api.jquery.com/closest) 대신 .parent'의 ['()'.closest])' – Blazemonger

+0

당신이하려는 것은 매우 불분명합니다. 'this'는 img 요소가 될 것이고, 이미'.parentNode.parentNode'를 가지고 행을 얻고 있습니다. –

+0

@Blazemonger : 나는 당신이 옳다고 생각합니다. .closest()에 대한 설명서를 읽은 후에는 .parent()보다 더 적합하다고 생각합니다. – dkengaroo

답변

1

parent() jQuery를에를 찾기 위해 가장 가까운 테이블

Similary을 찾을 .closest('table')를 사용할 필요가 table

+0

나는 시도했다 : var overallTable = $ (this) .parents ("table"). dataTable(); 및 얻을 : overallTable : [개체 개체] elementRow : [개체 HTMLTableRowElement] 다음 동일한 오류 내가 잡히고 볼 수있는 방법은 무엇입니까?그것은 단지 대상이 아니라? – dkengaroo

+0

.closest() 작품 – dkengaroo

0

parent()의 jQuery는 DOM의 한 수준 만 이동하므로 아마도 여기에 parents('table')이 필요합니다. 이 경우 전체 테이블 문제가 해결됩니다.

0

in jQuery, .parent()은 DOM을 한 번 올라갑니다. 당신은 당신은 요소의 행

var elementRow = $(this).closest('tr'); 
0

을 찾을 때까지 DOM을보고 그것을 .parents()를 이용해야한다 무엇 DOM을 한 레벨 만 구문 분석하면 .parents()/.closest()을 사용해야합니다. 이렇게하면 문제가 해결됩니다.

참고 :.live()은 최신 jQuery 버전에서 .on()으로 바뀌 었습니다. 더 나은 .on()/.click()

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(); 
});