我有一堆<tr>
其中一些<td>
包含class="myClass"
,但有些则没有。所以它看起来像这样的东西。
<tr>
<td class="myClass"></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
如果我在<tr>
,那么在我到达包含td.myClass
的最近行之前,我该如何上行?有一个聪明的方法来做到这一点?我现在拥有的是一个检查prev()的while循环,如果找到.myClass,它会中断。
答案 0 :(得分:5)
$currentTr.prevAll(':has(td.myClass)').first()
答案 1 :(得分:1)
这是一个有效的例子,不是很好,但有效。 http://jsfiddle.net/H2k8m/2/
1)td与class&#34; color&#34;将是选定的。
2)您可以使用它,也可以直接将所选对象分配给某个变量,并在函数外部使用它。
HTML:
<table>
<tr>
<td class="myClass">Hi</td>
<td>world</td>
</tr>
<tr>
<td class="myClass">1</td>
<td class="myClass" >2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
</table>
CSS:
.color {
background: #000;
color: #fff;
}
table {
cursor: pointer;
}
tr, td {
min-width: 50px;
border: 1px #000 solid;
padding: 5px;
text-align: center;
}
Jquery:
$(document).ready(function()
{
$("table tr td").click(function() {
if( $(this).prevAll('[class="myClass"]').length <= 0 ) {
var parents = $(this).parent().siblings();
for( i = $(this).parent().index(); i >= 0; i-- ) {
parents.eq( i ).find(".myClass").last().addClass("color");
if( parents.eq( i ).find(".myClass").length > 0) {
break;
}
}
}
else {
$(this).prevAll('[class="myClass"]').first().addClass("color");
}
});
});
答案 2 :(得分:1)
这是另一种方法,可以找到与myClass类名实际最接近的td。如果你想要tr,你可以简单地得到它所找到的内容:
var td$ = $("#myTable td.myClass");
$("#myTable td").click(function() {
td$.removeClass("found");
var temp$ = td$.add(this);
var i = temp$.index(this);
if (i > 0) {
temp$.eq(i - 1).addClass("found");
}
});
这将获得myClass所有td的列表。然后它将clicked元素添加到该jQuery对象(jQuery将在添加后将其排序为DOM顺序)。然后它找到该jQuery对象中被点击的元素的索引,如果它不是第一个项目,它只是获取它之前的项目,它将是表格中最接近的td.myClass对象。
工作jsFiddle:http://jsfiddle.net/jfriend00/XqLzb/