2014-11-15 6 views
11

mi aspetto che il seguente codice per avvisare "out"this.nextSibling non funziona

<input type=text onfocus="alert(this.nextSibling.id)" /> 
<output id="out">this is output</output> 

Ma avvisi indefinito PERCHE '?

risposta

11

nextSibling seleziona il nodo fratello successivo dell'elemento. Il nodo successivo può anche essere un textNode che non ha una proprietà id, quindi si ottiene il valore undefined. Come suggerito dall'altra risposta, è possibile utilizzare la proprietà nextElementSibling che fa riferimento al nodo fratello successivo che ha nodeType di 1 (ovvero un oggetto Elemento) o rimuovere i caratteri nascosti tra gli elementi.

Si noti che IE8 non supporta la proprietà nextElementSibling.

+0

ma nella mia codice non ci sono nodi tra l'elemento inout e output e non vedo i caratteri nascosti ant –

+0

@moroccan_dev Si prega di controllare questo violino e aprire la console per vedere il nodo registrato. http://jsfiddle.net/khcxjta5/ – undefined

+2

@moroccan_dev i caratteri nascosti sono qualcosa che non puoi vedere dal momento che sono nascosti. In questo caso, sono i personaggi di nuova riga. – cychoi

8

Prova questo:

alert(this.nextElementSibling.id); 

NOTA: Il nextSibling proprietà restituisce il nodo immediatamente seguente il nodo specificato, allo stesso livello dell'albero.

La proprietà read-only nextElementSibling restituisce l'elemento immediatamente successivo a quello specificato nell'elenco figli del genitore, oppure null se l'elemento specificato è l'ultimo nell'elenco.

+0

grazie tizio ero molto weired circa l'uscita indefinita –

-1

Partendo dal presupposto che è possibile utilizzare jQuery

Nota che this.nextSiblingmight not work in IE specifically

Il jQuery alternativa per this.nextSibling è $(this).next()

+3

Perché dovresti pubblicare una risposta jQuery a una domanda che richiede esplicitamente una risposta JavaScript e, da nessuna parte, suggerisce che jQuery sia in uso o sia un'opzione? Soprattutto dopo diciotto mesi (mentre scrivo questo)? –

+0

@DavidThomas, sono completamente d'accordo, so che è vecchio ma odio quando faccio domande su JavaScript e qualcuno suggerisce una libreria prefabbricata, voglio dire come possiamo imparare JavaScript se siamo pigri e usiamo gli script già fatti ogni volta, possiamo suggerire ad altri di usare jQuery se non vogliono imparare il vero javascript. –