2013-11-15 69 views
8

我使用Array.prototype.map.call以陣列來存儲一串節點列表的對象:如何獲取Array原型圖中的當前索引?

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e) { 
     return { 
      rectangle: e.getBoundingClientRect(); 
     } 
    } 
} 

然而,我也想存儲在此元素出現在DOM順序,我不知道該怎麼做。

我知道我將它存儲在一個數組中,並且順序將是數組的索引。例如:

var listings = getListings(); 
console.log(listings[0]); // rank #1 
console.log(listings[1]); // rank #2 
// etc... 

,但我將在數據庫中JSON對象,並存儲「等級」的信息是通過創建我的對象屬性「排名」最簡單的方法,但我不知道如何獲得當前數組的「索引」。

喜歡的東西:

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e) { 
     return { 
      rectangle: e.getBoundingClientRect(), 
      rank: magicFunctionThatReturnsCurrentIndex() // <-- magic happens 
     } 
    } 
} 

任何指向我朝着正確的方向幫助將不勝感激!感謝

+0

我想'document.querySelectorAll( 'li.g')'應該返回元素正好在正確的順序,即它們是如何出現在DOM。 – VisioN

+0

是的,但是有什麼方法可以得到數值嗎?我有當前順序的元素,但我想在我的JSON對象中具有其數值的屬性。 – ILikeTacos

回答

20

MDN documentation說:

回調調用與三個參數:元素的值,將 的元素的索引,並且該陣列對象正被遍歷。

所以

function getListings() { 
    return Array.prototype.map.call(document.querySelectorAll('li.g'), function(e, rank) { // magic 
     return { 
      rectangle: e.getBoundingClientRect(), 
      rank: rank // <-- magic happens 
     } 
    } 
} 
+2

我一遍又一遍地讀了那個頁面,不知什麼原因,我從未注意到索引也被傳遞了。謝謝! – ILikeTacos

相關問題