2013-01-23 35 views
1

我想查看NewEgg產品ID的格式,所以從他們的主頁我嘗試運行以下腳本將所有鏈接產品的ID吐出到控制檯:變量未定義用於某些用途,爲其他人定義

for (var i=0;i<document.links.length;i++) { 
    if (document.links[i].href.indexOf("Product.aspx")!=-1) { 
     var itemNo=document.links[i].href.split("Item=")[1]; 
     console.log(itemNo); 
    } 
} 

(正如你所看到的,產品鏈接有「Product.aspx」在其中,隨後?Item=[itemid]。簡單split?Item=後獲得的部分)。這個腳本工作正常。但是,當我試圖獲得「fancier」時,我開始收到錯誤消息itemNo未定義。這是我試過的腳本:

for (var i=0;i<document.links.length;i++) { 
    if (document.links[i].href.indexOf("Product.aspx")!=-1) { 
     var itemNo=document.links[i].href.split("Item=")[1];' 
     if (itemNo.charAt(0)=="N") {//look at only IDs that start with 'N' 
      console.log(itemNo); 
     } 
    } 
} 

該報道稱,貨號在第二if聲明(在第四行內if以上)不確定的。註釋掉if聲明(第4行和第6行)使其再次正常工作。所以基本上,我可以登錄它,但我不能if它。在日誌記錄之前,我還嘗試了一些更多的字符串處理來代替if,但在定義了itemNo的行之後,除了記錄日誌之外,我無能爲力。我試圖改變變量名稱無濟於事。無可否認,這是來自Firebug控制檯(也嘗試過Firefox的本機Scratchpad),所以環境有點不同,但我沒有看到爲什麼有時應該定義變量,但沒有定義其他時間。

回答

1

問題在於您的搜索條件。

正如你可以看到一些鏈接有「Product.aspx」,但不是產品的鏈接,如下所示: 「http://www.newegg.com/Store/NewProduct.aspx?Name=What %27S-新」

你應該更具體,如:

for (var i=0;i<document.links.length;i++) { 
    if (document.links[i].href.indexOf("/Product.aspx?")!=-1) { 
     // Added log 
     console.log(document.links[i].href); 

     var itemNo=document.links[i].href.split("Item=")[1]; 
     if (itemNo.charAt(0)=="N") { 
      console.log(itemNo); 
     } 
    } 
} 
+0

工作非常出色,非常感謝! –

2

這實際上並不是Firebug的問題。如果您嘗試以下方法:

for (var i=0;i<document.links.length;i++) { 
    if (document.links[i].href.indexOf("Product.aspx")!=-1) { 
     // Added log 
     console.log(document.links[i].href); 

     var itemNo=document.links[i].href.split("Item=")[1]; 
     if (itemNo.charAt(0)=="N") { 
      console.log(itemNo); 
     } 
    } 
} 

你會發現,第一個環節不在查詢字符串Item=。因此,當您嘗試拆分href時,會返回undefined,然後嘗試運行charAt(),這當然會引發TypeError。

基本上,你只是沒有檢查undefined。一個簡單的檢查應該這樣做:

for (var i=0;i<document.links.length;i++) { 
    if (document.links[i].href.indexOf("Product.aspx")!=-1) { 
     var itemNo=document.links[i].href.split("Item=")[1]; 
     // Right here 
     if (itemNo && itemNo.charAt(0)=="N") { 
      console.log(itemNo); 
     } 
    } 
} 
0

看看你的第一個腳本的第一個結果(這工作正常)。它是未定義的。這是你的第二個腳本錯誤的原因。

你應該重寫它檢查是否貨號是underfined:

for (var i=0;i<document.links.length;i++) { 
if (document.links[i].href.indexOf("Product.aspx")!=-1) { 
    var itemNo=document.links[i].href.split("Item=")[1]; 
    if (itemNo!=undefined&&itemNo.charAt(0)=="N") {//look at only product ideas that start with N 
     console.log(itemNo); 
    } 
} 

}