2011-08-18 26 views
7

Estoy utilizando la delegación de eventos en mootools. Quiero saber el número de fila que se ha hecho clic. Mi solución se muestra en este jsfiddle: ¿hay una mejor manera de lo que estoy haciendo actualmente?Mootools obtiene el índice hijo de un elemento de su elemento primario

Mi enfoque fue comparar los elementos hasta que encontré la coincidencia. ¿Hay algún método de IndexOf que pueda usar?

(El siguiente es los datos de la jsFiddle para el 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); 
      }); 
    }); 

Respuesta

9

El tipo (Elements) devuelto por getChildren contiene Array métodos, including indexOf. MooTools proporcionará una implementación de ese método si no existe para el navegador. Con esto en mente, se podría escribir:

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

ejemplo Actualizado:http://jsfiddle.net/andrewwhitaker/uJarB/

0

Esto es bastante hacky, pero siempre se puede utilizar Array.prototype 's indexOf ...

Array.prototype.indexOf.call(list-o-children, elem-to-find) 
Cuestiones relacionadas