2011-10-19 21 views
0

可能重複:
jQuery: prev(<selector>) not working?Jquery的使用遍歷分組()

考慮這個標記:

<tr class="store"> 
    <td>...</td> 
    <td>...</td> 
    <td>...</td> 
</tr> 
<tr> 
    <td>...</td> 
    <td>...</td> 
    <td>...</td> 
</tr> 
<tr> 
    <td>...</td> 
    <td>...</td> 
    <td><a href="#" class="link">link</a></td> 
</tr> 

然後此jQuery代碼:

$('.link').live('click', function() { 
    $(this).parents('tr').prev('.store').remove(); 
}); 

我想要做的是當我嘗試點擊<a href="#" class=".store"時,應該刪除以前的<tr class="store">。我發佈的Jquery代碼不起作用。有什麼想法嗎?

+0

'prev'選擇前一個兄弟** **如果它選擇相匹配。它不會選擇與選擇器匹配的前一個兄弟。請參閱[文檔](http://api.jquery.com/prev/)。 –

+1

注意:你應該考慮使用['closest()'](http://api.jquery.com/closest)而不是'parents()'(但是你的問題可以通過'prevAll()'修復;參見重複)。 – Matt

回答

2

嘗試demo

$('.link').live('click', function(evt) { 
    evt.stopPropagation(); 
    $(this).closest('tr').prevAll('.store:eq(0)').remove(); 
}); 
+0

如果有多個''? – Turtel

+0

它只會刪除最接近'a'標籤的那個。 – Yoshi

0

就像Felix Kling說的,prev選擇前一個(同胞)DOM元素,而不是所有以前的兄弟姐妹。你想用

+0

如果有多個''? – Turtel

0

.prev()只得到直接前置兄弟。如果「鏈接行」和「商店行」之間存在差距,則不起作用。您應該使用.prevAll()來代替。

$('.link').live('click', function() { 
    $(this).closest('tr').prevAll('.store').eq(0).remove(); 
}); 

如果你想刪除所有以前的「存儲行」,你可以刪除「.eq(0)」。

Live example