2016-08-21 75 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:这是一个完全独立的问题,但我在上面的末尾添加了一个注释。 –