2011-08-18 14 views
7

Sto utilizzando la delega dell'evento in mootools. Voglio sapere il numero di riga che è stato cliccato. La mia soluzione è mostrata in questo jsfiddle: c'è un modo migliore di quello che sto facendo attualmente?Mootools ottiene l'indice figlio di un elemento dal suo genitore

Il mio approccio era di confrontare gli elementi fino a quando ho trovato la corrispondenza. C'è un metodo IndexOf che potrei usare?

(Ciò che segue è i dati dal jsfiddle per il futuro)

HTML:

<div id="Record_List"> 
    <div class="Row"> 
     <input type="submit" name="Row" value="Edit"/> 
    </div> 
    <div class="Row"> 
     <input type="submit" name="Row" value="Edit"/> 
    </div> 
</div> 

Javascript:

window.addEvent(
    'domready', 
    function() 
    { 
     $('Record_List').addEvent(
      'click:relay(input)', 
      function(evt, target) 
      { 
       evt.stop(); 

       var rowElem = target.getParent(); 
       var rowNumber = -1; 

       $('Record_List').getChildren('div.Row').each(
        function (el, num) 
        { 
         if (rowElem === el) 
         { 
          rowNumber = num; 
         } 
        }); 

       // Find the position of the row and display it here: 
       alert('Row number: ' + rowNumber); 
      }); 
    }); 

risposta

9

Il tipo (Elements) restituito da getChildren contiene i metodi Array, including indexOf. MooTools fornirà un'implementazione di tale metodo se non esiste per il browser. Con questo in mente, si potrebbe scrivere:

$('Record_List').getChildren('div.Row').indexOf(rowElem); 

esempio Aggiornato:http://jsfiddle.net/andrewwhitaker/uJarB/

0

Questo è abbastanza hacky, ma si può sempre utilizzare Array.prototype 's indexOf ...

Array.prototype.indexOf.call(list-o-children, elem-to-find) 
Problemi correlati