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].Simple splitto get the part after ?Item=)。该脚本运行良好。但是,当我试图变得“更高级”时,我开始收到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);
        }
    }
}

这报告了 itemNo 在第二个if语句中未定义(if上面第四行的内部)。注释掉该if语句(第 4 行和第 6 行)使其再次正常工作。所以基本上,我可以记录它,但我不能if。我还尝试了更多的字符串操作来代替if之前的记录,但是在定义的行之后,itemNo除了记录它之外我无能为力。我尝试更改变量名无济于事。

诚然,这是来自 Firebug 控制台(也尝试过 Firefox 的原生 Scratchpad),所以环境有点不同,但我看不出为什么有时应该定义变量,但有时却未定义。

4

3 回答 3

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);
        }
    }
}
于 2013-01-23T17:22:52.690 回答
1

问题在于您的搜索条件。

如您所见,一些链接具有“Product.aspx”,但不是产品链接,例如:“http://www.newegg.com/Store/NewProduct.aspx?Name=What%27s-New”

您应该更具体,例如:

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);
        }
    }
}
于 2013-01-23T17:25:02.283 回答
0

查看您的第一个脚本的第一个结果(效果很好)。它是未定义的。这就是您的第二个脚本中出现错误的原因。

您应该重写它,检查 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!=undefined&&itemNo.charAt(0)=="N") {//look at only product ideas that start with N
        console.log(itemNo);
    }
}

}

于 2013-01-23T17:46:54.907 回答