[英]jQuery: finding ancestors siblings with matching content / tree walking
<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”匹配的元素,那將是理想的選擇。
非常感謝。
jQuery('.ContextRow').closest("tbody").siblings('tbody td.TargetRow:last');
編輯:最后不是第一
看到它的工作原理: http : //jsfiddle.net/wU6h9/
您的描述讓我有些困惑,但是當您說“查找包含tr.ContextRow的那個tbody的上一個同級兄弟”時 ,聽起來好像您想找到包含一個包含類.contextRow
和一個元素的上一個<tbody>
得到它的.targetRow
。
如果那是您想要的,請嘗試此。
jQuery(contextRow).parents("tbody:first")
.prevAll('tbody:has(tr.ContextRow):first td.TargetRow');
如果您要說td.TargetRow
請執行'tbody:has(td.TargetRow):first td.TargetRow'
。
$(".ContextRow").closest("tbody").prevAll().find(".TargetRow").eq(0).css({color: "red"});
這將返回最接近的單個前一個.TargetRow
最接近 .closest()
完全滿足您的需求。
獲取與選擇器匹配的第一個祖先元素,從當前元素開始,一直到DOM樹。
您的查詢是
$('.ContextRow').closest('tbody').siblings('tbody td.TargetRow').last();
它將返回一個對象(不像父母那樣,它返回多個元素直到頂部),或者如果id找不到一個則返回零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.