2011-08-18 105 views
7

我正在使用mootools中的事件委託。我想知道已被點擊的行號。我的解決方案顯示在此jsfiddle:有沒有比我目前所做的更好的方法?Mootools從其父項獲取元素的子索引

我的方法是比較元素,直到我找到匹配。有沒有可以使用的IndexOf方法?

(以下是從的jsfiddle數據對未來)

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); 
      }); 
    }); 

回答

9

返回的類型(ElementsgetChildren包含Array方法,including indexOf。如果瀏覽器不存在,MooTools將提供該方法的實現。考慮到這一點,你可以寫:

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

更新例如:http://jsfiddle.net/andrewwhitaker/uJarB/

0

這是相當哈克,但你可以隨時使用Array.prototypeindexOf ...

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