2016-08-21 89 views
4

如何從點擊的tr獲得td的類?獲得td類的點擊tr?

我有這樣的結構:

<tr role="row" data-id="1" class="odd parent"> 
    <td class="sorting_1">test</td> 
    <td>foo</td> 
    <td>3223232</td> 
</tr> 

我寫了這個代碼:

$('#datatable > tbody > tr').click(function() 

我想要做的就是防止處理上面的代碼,如果在td與類用戶點擊sorting_1。每個tr都有這個類的td,所以我需要檢查用戶是否點擊了這個td類,並阻止代碼執行。

UPDATE

由@ T.J提供的代碼。克勞德工作良好,但是,當我點擊<td>有這個類,我不能繼續代碼,這是正確的。但我需要檢查,如果TD還包含::before,事實上這在HTML沒有足夠的空間(響應)會增加,在這種情況下,正確的架構是:

<tr role="row" class="odd parent" data-id="1"> 
    <td class="sorting_1">test</td> 
     ::before 
     "test" 
    <td>foo</td> 
    <td>3223232</td> 
</tr> 

回答

4

你可以做到這一點的告訴處理器忽略td s的該類:

$('#datatable > tbody > tr').on("click", "td:not(.sorting_1)", function(e) (
// -------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    // ... 
}); 

(這包括以下兩種場景中,直接點擊和點擊的td的後代。)


或者,你可以做,通過檢查對事件target屬性對象的處理程序接收:

$('#datatable > tbody > tr').click(function(e) (
    // -------------------------------------^ 
    if ($(e.target).hasClass("sorting_1")) { 
     // Don't do it 
     return; 
    } 
}); 

如果td可以在它裏面的其他元素(spanem等),你可以使用closest找出:

$('#datatable > tbody > tr').click(function(e) (
    // -------------------------------------^ 
    if ($(e.target).closest(".sorting_1").length) { 
     // Don't do it 
     return; 
    } 
}); 

重新您的其他問題:

是否可能檢查td是否有:before?因爲當沒有可用的空間來適應HTML內容(響應)時添加:before。所以你的代碼工作,但是如果我點擊有類的TD並且沒有:before我看不到要顯示的內容。是否可能檢查:在此td之前是否存在?

你可以從getComputedStyle現代瀏覽器:

console.log(
 
    getComputedStyle($("#target")[0], "::before").content 
 
);
#target::before { 
 
    content: 'Life, the Universe, and Everything? ' 
 
}
<div id="target">42</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我不認爲你可以得到它不支持getComputedStyle舊的瀏覽器。此外,測試您的目標瀏覽器以在:before(舊僞類)和::before(其較新名稱)之間做出決定。

+0

是的,這似乎工作(解決方案1)我沒有嘗試第二種解決方案。謝謝你:) – AgainMe

+0

只有一個問題:是否可以檢查,如果TD有':before'?因爲沒有可用的空間來容納HTML內容(響應),所以添加':before'。所以你的代碼工作,但如果我點擊有類的td,並且沒有':before',我看不到要顯示的內容。是否有可能在此td上檢查':before'存在? – AgainMe

+0

@AgainMe:這是一個完全獨立的問題,但我在上面的末尾添加了一個註釋。 –