2013-05-08 10 views
6

jQuery ha "più vicino" che restituisce l'antenato di corrispondenza più vicino nell'albero. Esiste un dardo equivalente? Mi piacerebbe fare la seguente meno fragile:c'è un equivalente a "più vicino" di jQuery in Dart

e.target.parent.parent.nextElementSibling.classes.toggle('hide'); 

forse qualcosa di simile:

e.target.closest('div').nextElementSibling.classes.toggle('hide'); 
+0

Quindi, in pratica, si desidera cercare in modo ricorsivo per un elemento padre corrispondente alcuni criteri? Ho capito bene? – MarioP

+0

Beh, non voglio dettare l'implementazione, ma sì. –

+0

Dove posso iniziare un problema per aggiungere questa funzione a dart: html? –

risposta

4

Non c'è una funzione built-in per quanto ne so. Ma è abbastanza facile codificare qualcosa.

La funzione findClosestAncestor() definita di seguito trova l'antenato armadio per un elemento dato il tag antenato:

<!DOCTYPE html> 

<html> 
    <head> 
    <title>ancestor</title> 
    </head> 

    <body> 
    <div id='outer'> 
     <div id='inner'> 
     <p></p> 
     </div> 
    </div> 

    <script type="application/dart"> 
     import 'dart:html'; 

     Element findClosestAncestor(element, ancestorTagName) { 
     Element parent = element.parent; 
     while (parent.tagName.toLowerCase() != ancestorTagName.toLowerCase()) { 
      parent = parent.parent; 
      if (parent == null) { 
      // Throw, or find some other way to handle the tagName not being found. 
      throw '$ancestorTagName not found'; 
      } 
     } 
     return parent; 
     } 

     void main() { 
     ParagraphElement p = query('p'); 
     Element parent = findClosestAncestor(p, 'div'); 
     print(parent.id); // 'inner' 
     }  
    </script> 

    <script src="packages/browser/dart.js"></script> 
    </body> 
</html> 
+1

Suggerirei di rendere il codice di esempio il più minimale possibile, o di dividere il codice in un tag di script. –

Problemi correlati