2011-12-15 27 views
16
<div class="container" id = "0" > 
    <div class="x" id = "1"> 
     <div id = "2"> 
     <p id = "3"> 
      <span id = "4" >text</span> 
     </p> 
     <div> 
    </div> 

    <div id="5"> 
     <div id="6"> 
     <p id="7"> 
      <span class="x" id="8" >text</span> 
      <span id="9">text</span> 
     </p> 
     <div> 
    </div> 
<div> 

Mi potete aiutare a selezionare tutti gli elementi:jQuery: selezionare tutti gli elementi che non sono discendente di una certa classe

  • che sono discendente di' .container "'
  • non discendente di '.x'
  • non ha la classe '.x' stessa.

Osservando l'HTML sopra; dovrebbe selezionare gli elementi 5,6,7 e 9

  • elemento 1 ha classe "X"
  • elementi 2 è figlio diretto di una "X" elemento-con-classe (Element 1)
  • elementi 3 e 4 sono discendenti una "X" elemento-con-classe (Element 1)

elemento 8 contiene classe "X"


Ho questo selettore ma mantiene selezionando il discendenti (figli di profondità) di elemento con classe "X"

var elements = $('.container').find().parents(':not(.X)').andSelf().filter(':not(.X)'); 

risposta

16

Questo dovrebbe farlo:

$('.container').find(':not(.x):not(.x *)'); 

Edit: ritornato alla prima revisione ancora. Ho pensato che non funzionasse in questo modo, ma hai un errore nel tuo codice HTML che rende il genitore di tutti gli elementi #1, quindi nessuno è selezionato.

<div class="container" id = "0" > 
    <div class="x" id = "1"> 
     <div id = "2"> 
     <p id = "3"> 
      <span id = "4" >text</span> 
     </p> 
     <div> <!-- <-- must be a closing div tag --> 
    </div> 

    <div id="5"> 
     <div id="6"> 
     <p id="7"> 
      <span class="x" id="8" >text</span> 
      <span id="9">text</span> 
     </p> 
     <div> <!-- <-- must be a closing div tag --> 
    </div> 
<div> <!-- <-- must be a closing div tag --> 
+2

Non '$ ('. Contenitore: non (.x): non (.x *)')' essere migliore? –

+0

Sì. Non so cosa pensavo allora. Forse perché l'OP già usato. –

1

utilizzando i caratteri jolly sia

$(".container :not(* .x)") 

o

$(":not(* .x)", ".container") 

possono funzionare.

Problemi correlati