jQuery:找到具有匹配内容/树行走的祖先兄弟姐妹

时间:2010-08-17 14:37:27

标签: javascript jquery jquery-selectors

<table>
    <tbody>
      <tr>
     <td class="TargetRow">Not this one</td>
      </tr>
    </tbody>
    <tbody> ... </tbody>
    <tbody>
      <tr>
     <td class="TargetRow">This one</td>
      </tr>
    </tbody>
    <tbody> ... </tbody>
    <tbody>
        <tr class="ContextRow"> ... </tr>
    </tbody>
</table>

鉴于上述HTML,我试图找到一种方法来获取 TargetRow tr 的内容。即对于包含 td.TargetRow 的第一个前一个tbody,返回 td.TargetRow

我正在使用jQuery,目前我可以使用以下方法获取包含ContextRow的 tbody

 jQuery(contextRow).parents("tbody").first()

我现在如何找到包含 tr.ContextRow tbody 之前的兄弟?

如果只有一种方法可以让我从 contextRow 走到DOM树,直到找到匹配“td.TargetRow”的元素,那么这将是理想的

非常感谢。

4 个答案:

答案 0 :(得分:1)

jQuery('.ContextRow').closest("tbody").siblings('tbody td.TargetRow:last'); 

编辑:最后不是第一次

看到它有效:http://jsfiddle.net/wU6h9/

答案 1 :(得分:1)

我对你的描述感到有些困惑,但是当你说“找到包含tr.ContextRow的那个tbody的前一个兄弟”时,听起来你想要找到之前的{{1包含类<tbody>的元素并获取其.contextRow

如果这就是你想要的,试试这个。

.targetRow

如果您想说jQuery(contextRow).parents("tbody:first") .prevAll('tbody:has(tr.ContextRow):first td.TargetRow'); ,请执行td.TargetRow

答案 2 :(得分:0)

$(".ContextRow").closest("tbody").prevAll().find(".TargetRow").eq(0).css({color: "red"});

这将返回最接近的前一个.TargetRow

http://jsfiddle.net/LfWg3/3/

答案 3 :(得分:-2)

Closest - .closest()完全符合您的需要。

获取与选择器匹配的第一个祖先元素,从当前元素开始并逐步向上遍历DOM树。

您的查询将是,

$('.ContextRow').closest('tbody').siblings('tbody td.TargetRow').last(); 

它将返回一个对象(与父项不同,它返回多个元素直到顶部),如果id没有找到,则返回零。