2011-04-26 87 views
0

我已經在Firefox JS擴展results.shift不是一個函數:Firefox擴展

var results = gBrowser.contentDocument.getElementsByClassName("b-serp-item__title-link"); 

alert(results.length); 
var countToDelete = results.length - 10; 
alert(countToDelete); 
if (countToDelete > 0) 
{ 
    for (var i = 0; i < countToDelete; i++); 
    { 
     alert("I prepare");    
     results.shift(); 
     alert("I done"); 
    } 
} 
alert("succ"); 

寫了這個代碼,我已經得到了這個輸出

results.length = 12 countToDelete = 2 (我準備)

和......這就是全部 results.shift();有一個問題; 我看着在Firefox錯誤控制檯,我發現這個

「results.shift是不是一個函數」

爲什麼?轉移一個js函數? 當我嘗試在Firefox控制檯中運行此代碼時,我又遇到了這個錯誤

什麼事情?

我的Firefox的版本是4 測試網址爲http://yandex.ru/yandsearch?text=%D0%BE%D0%B1%D0%BE%D0%B9%D0%BD%D1%8B%D0%B9+%D0%BA%D0%BB%D0%B5%D0%B9+%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C&lr=37

+0

是的HTMLCollection一個數組? – mplungjan 2011-04-26 06:39:56

+0

不,它很像一個數組:它有一個長度,你可以使用'collection [0]','collection [1]'等等來獲取它的元素,但它實際上並不是一個數組。 – MatrixFrog 2011-04-26 06:52:37

回答

1

這將轉換您的nodelist到一個真正的Array,其中有一個可用的shift方法:

var results = Array.prototype.slice.call(
       gBrowser 
        .contentDocument 
        .getElementsByClassName("b-serp-item__title-link") 
      ); 
1

我認爲這是清除壁虎中沒有shift()

https://developer.mozilla.org/En/DOM/NodeList

主要問題是你想通過它實現什麼?通過刪除NodeList中的項目,您當然不會將它們從DOM文檔中刪除。你與removeChild()吵架了什麼?