Seleniumとnodejを使用してhtmlテーブルを反復処理し、配列の文字列をテーブルセルの文字列に一致させます。Javascript:ループ内のインクリメントカウンタ変数
配列は["名前"、 "住所2"、 "住所3"、...]であり、tr [1]の値はArr [0]、tr [2] ]とArr [1]などを使用します。
htmlテーブルには配列内の各アイテムの行がありますが、Address2のデータがない場合は表示されません。
この場合、tr [3]はArr [3]と一致しないことがわかります。 tr [4]に移動する代わりに、tr [3]がArr [4]、Arr [5]などと一致するかどうかを確認したいと思います。テーブル内の項目は常に配列内の項目と同じ順序になりますだから、私は配列の項目が "不一致"の必要はありません。
関連性がある場合に備えて関数全体を投稿しましたが、問題は次のループ反復に新しい値を渡すために "i = i - 1"を得ることができないと思われます。
私はElseセクションに入ることを証明しました.i-1の値は、その時点で期待したとおりです。
var retrieveData = function retrieveData(Arr){
j = 0
driver.findElements(webdriver.By.xpath("//*[@class='table-container']")).then (function(rows){
rowCount = rows.length;
console.log("Row count = " + rowCount);
}).then (function(fn){
for (i = 1;i < rowCount + 1; i++){
(function(i){
var element = driver.findElement(webdriver.By.xpath("//div[@class='table-container']["+i+"]/div/strong/a"));
element.getText().then(function(Type){
var typefromArray = String(Arr[j].split(':')[0]);
if (Type == typefromArray){
// Do something
j = j + 1;
} else {
// Do something
i = i - 1 // My problem looks to be here, but may be in the transfer of this back up to the beginning of the loop
j = j + 1;
}
});
})(i);
};
});
};
module.exports.retrieveData = retrieveData;
- IIFEの内部に「1」を含む。また、 'i - 'と 'j ++'を使うこともできます。 –
こんにちは、すばらしい返答をいただきありがとうございます。文字列が一致しない(If文がFalseを返す)場合にのみカウンタを減少させたい。どうすればi = i - 1(またはi--)をElseの外に保つことができますか? – user7540600
'(function(i){'宣言で 'i'のスコープをシャドーイングしています。 – Sunshine