2013-11-01 96 views
6

我在試圖讓帶班「幻燈片」使用jQueryjQuery的發現之前最近一個兄弟不具有類

不含有類「小節」最接近的前一個元素難倒

樣本HTML:

<section id="p1" class="slide"></section> 
<section id="p2" class="slide"></section> 
<section id="p3" class="slide"></section> <!--I AM TRYING TO GET THIS ELEM --> 
<section id="p31" class="slide subsection"></section> 
<section id="p32" class="slide subsection"></section> <!--I AM HERE --> 
<section id="p4" class="slide"></section> 

我曾嘗試:(其中$款是上面指出的元件)

var $slide = $subsection.prev('.slide').not('.subsection'); 
var $slide = $subsection.prev('.slide:not(".subsection")'); 
var $slide = $subsection.prev('.slide').not("[class='subsection']"); 
var $slide = $subsection.prev('.slide:not([class="subsection"])'); 

現在我發現分組()僅選擇單個先前ELEM,然後停止,但PREVU NTIL也不起作用?

var $slide = $subsection.prevUntil('.slide').not('.subsection'); 

我也試過:

var $slide = $subsection.prevAll('.slide').not('.subsection'); 

但是這讓我ID爲P1的第一個滑動元件。

如果任何人有任何提示,我會很感激它... 任何人都可以阻止我去克雷克雷? 8 |

+0

如果你需要做到這一點,也許你應該質疑是否你的CSS類/ HTML元素結構應該更簡單,更容易導航? –

+0

我認爲這應該很容易......沒有課程小節的「最接近」的幻燈片。調整爲嵌套結構並不難,但使用此結構添加子節點可以使CSS無需其他更改即可工作。 –

+0

...最後,它非常簡單,感謝@Hiral指出了答案。 –

回答

8

試試這個:

var a = $("#p32").prevAll(".slide").not(".subsection").first(); 
alert($(a).text()); 

Fiddle here.

+0

這是它! prev將以相反的順序遍歷並且在收集多個元素時,first()會以相反的順序捕獲它所遇到的第一個元素。非常感謝。 –

+0

@NatachaBeaugeais你歡迎:) – Hiral

2

你可以試試這個

$('.subsection').prev('.slide:not(".subsection")'); 

An Example here.

+0

這在我的測試中失敗了,因爲.prev只會選擇第一個元素,我不能假定$('。subsection')會得到所需的元素,因爲在實際的例子中可能會有很多的子元素(在p2和p4等),所以它可能不一定會得到正確的子部分元素...在上面的$小節= $('#p32')注意 - 不知道這是否清楚我的例如。 –