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=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 が 2 番目のifステートメント (if上の 4 行目の内部) で定義されていないことを報告しました。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

最初のスクリプトの最初の結果を見てください (正常に動作します)。未定義です。これが、2 番目のスクリプトのエラーの理由です。

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 に答える