2015-06-22 3 views
9

Voglio ottenere e modificare il primo figlio dell'elemento specificato in una direttiva Angolare.Ottenere il primo figlio nella direttiva AngularJS

<div class="wanted"> 
</div> 
<div class="not-wanted"> 
</div> 
<div class="not-wanted"> 
</div> 

Ho già provato

elm.children('.wanted') 

ma poi la mia direttiva modifica tutti i bambini. Come posso farlo correttamente?

+0

Hai dato una prova con i CSS: primo selettore bambino –

+0

aggiornamento alla domanda con più codici –

+3

JqLite non accetta un selettore per i bambini() - ecco perché stai ricevendo tutti gli elementi figlio diretti. Vedi qui: https://docs.angularjs.org/api/ng/function/angular.element – Donal

risposta

7

è possibile utilizzare:

elm.children().first(); 

o:

elm.children(':first') 

Entrambi avranno lo stesso effetto. Il secondo è leggermente più performante.

+0

Ho ricevuto TypeError: elm.children (...). First non è una funzione per il primo – roschulze

+1

Potresti aggiornare il tuo domanda con la tua fonte direttiva e il modo in cui la usi nel tuo html? –

+0

il secondo funziona bene – roschulze

4

Angolare include jqLite. JqLite non accetta un selettore per children() - ecco perché stai ricevendo tutti gli elementi figlio diretti.

È possibile utilizzare .find. Per esempio:

elm.find('.wanted'); 
+0

Angular jqLite non accetta un selettore di classe per trovare entrambi. "Limitato alle ricerche per nome tag". –

1

In modo angolare, con l'aiuto delle direttive

<div ng-repeat="name in names"> 
<div check-render>{{name}}</div> 
</div> 

controller

angular.module('myApp').directive('checkRender', function ($timeout) { 
    return { 
     restrict: 'A', 

     link: function (scope, el, attrs) { 
if(scope.$first) 
alert('first called'); 
} 
} 
}); 
+1

Questo non ha senso. Il tuo attributo è 'custom-render', ma la tua direttiva è vincolata a' checkRender'. Inoltre, dover scrivere un intero controller/direttiva solo per determinare se esiste il primo figlio? Non sembra che sia il modo migliore. –

4

io uso: element.children().eq(0)

children() - ottenere i figli di ogni elemento in il set di elementi abbinati

eq() - Ridurre l'insieme di elementi corrispondenti a quello in corrispondenza dell'indice specificato