2013-11-01 1 views
6

stumped a cercare di ottenere l'elemento precedente più vicino alla classe di 'slide' che non contiene 'sottosezione' classe utilizzando jQueryjquery trovare più vicino fratello precedente che non ha classe

HTML di esempio:

<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> 

ho provato: (dove $ sottosezione è l'elemento sopra indicato)

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"])'); 

Ora ho scoperto che prev() seleziona solo una singola elem precedente e poi si ferma, ma PREVU ntil non funziona neanche?

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

Ho anche provato:

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

ma questo mi ottiene il primo elemento scorrevole con ID p1.

Se qualcuno ha qualche suggerimento lo apprezzerei ... Qualcuno può impedirmi di andare a cray cray? 8- |

+0

Se avete bisogno di fare questo, forse si dovrebbe chiedere se la vostra classe CSS/La struttura dell'elemento HTML dovrebbe essere più semplice e più facilmente navigabile? –

+0

Ho pensato che dovrebbe essere abbastanza semplice ... la diapositiva "più vicina" che non ha sottosezione di classe. Non sarebbe difficile adattarsi a una struttura nidificata, ma l'aggiunta di sottosezioni utilizzando questa struttura consente al CSS di funzionare senza modifiche aggiuntive. –

+0

... ed è stato molto semplice alla fine, grazie a @Hiral che ha sottolineato la risposta. –

risposta

8

Prova questo:

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

Fiddle here.

+0

CHE LO ERA !! prevAll attraversa nell'ordine inverso e, raccogliendo più elementi, prima() ha afferrato il primo che ha trovato in quell'ordine inverso. Grazie mille. –

+0

@NatachaBeaugeais siete i benvenuti :) – Hiral

2

Si può provare questo

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

An Example here.

+0

Questo fallito nei miei test, poiché .prev seleziona solo il 1 ° elemento precedente e non posso presumere che $ ('. Sottosezione') otterrà l'elemento richiesto poiché potrebbero esserci molti elementi di sottosezione nell'esempio reale (sotto p2 e p4 ecc.) quindi potrebbe non necessariamente ottenere l'elemento di sottosezione corretto ... nota in precedenza $ sottosezione = $ ('# p32') - Non sono sicuro se questo fosse chiaro nel mio esempio. –