我正在网站上工作,但我遇到了一个问题。
我有一个使用nth-child()
的12x24表,我想使用jQuery来检查点击了哪个nth-child()
。
目前我尝试过:
$('table.masteries tr.p0 td').click(function() {
if($(this) == $('table.masteries tr.p0 td:nth-child(1)')) {
console.log('true')
}
});
但我在控制台中没有得到回应。
该表格如下:
<table class="masteries">
<tr class="p0">
<td></td>
...
</tr>
<tr class="p4">
<td></td>
...
</tr>
<tr class="p8">
<td></td>
...
</tr>
<tr class="p12">
<td></td>
...
</tr>
<tr class="p16">
<td></td>
...
</tr>
<tr class="p20">
<td></td>
...
</tr>
<table>
所以我想知道是否无法检查$(this)
是否可以在if语句中工作。
如果不是,是否有另一种使用jQuery / Javascript if-statements检查某些nth-child()
的方法?
答案 0 :(得分:11)
您可以使用jQuery的.index()
方法查找当前元素的索引,或使用jQuery的.is()
方法使用CSS选择器执行检查。
$('table.masteries tr.p0 td').click(function() {
var $this = $(this);
// You don't need to use these together, both should work independently
if ($this.index() === 0 || $this.is(':nth-child(1)')) {
console.log('true')
}
});
答案 1 :(得分:1)
我建议使用$(this).index()
来获取与其兄弟姐妹相关的元素索引。
例如,检查它是否是第一个...
$('table.masteries tr.p0 td').click(function() {
if($(this).index() == 0) {
console.log('true')
}
});
答案 2 :(得分:0)
您的代码几乎是正确的,它不起作用,因为$(this)
和$('table.masteries tr.p0 td:nth-child(1)')
可能引用相同的元素,但它们是两个不同的对象。
因此检查失败,因为您正在比较对象相等性,并且您有两个不同的对象包装相同的元素,或者两个不同的对象包含两个不同的元素。
您可以尝试许多不同的事情:
.is()
如果元素与给定的选择器匹配,则返回true(您可以传递正在使用的相同选择器或使用:first-child
选择器); .index()
返回与其兄弟相比较的元素索引,并检查它是否等于0
; Element
并比较$(this).get(0) == $('table.masteries tr.p0 td:nth-child(1)').get(0)
。如果您只对p0
行的点击感兴趣,则可以使用其他方法:
$('table.masteries tr.p0').click(function() {
// clicked p0 row or any of its children
});