找到包含.myClass的最近的兄弟姐妹

时间:2012-04-30 02:58:15

标签: javascript jquery

我有一堆<tr>其中一些<td>包含class="myClass",但有些则没有。所以它看起来像这样的东西。

<tr>
<td class="myClass"></td>
<td></td>
</tr>

<tr>
<td></td>
<td></td>
</tr>

如果我在<tr>,那么在我到达包含td.myClass的最近行之前,我该如何上行?有一个聪明的方法来做到这一点?我现在拥有的是一个检查prev()的while循环,如果找到.myClass,它会中断。

3 个答案:

答案 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/