jQuery - Safari/iOS 中 SqlResultsetRowList 上的 $.each

jQuery - $.each on SqlResultsetRowList in Safari/iOS

我正在尝试使用 $.each 来加速 SqlResultsetRowList 的迭代,我目前正在使用 For 循环。这是新代码 -

localDB.transaction(function(transaction){ transaction.executeSql(query, [val], function(transaction, results) { var rows = results.rows; $.each(rows, function(i) { var row = results.rows.item(i); }); } ) });

问题是 i 返回的不是索引而是字符串 "length" 并且它显然在那个时候中断了。

我做了一些进一步的测试,这在 Chrome 中按预期工作。 Chrome 将 SqlResultsetRowList 视为一个数组,但 Safari 不会。是否可以将结果集转换为数组,以便 Safari 可以使用 $.each 对其进行迭代?

试试这个

$.each(rows, function(i, val) {
    var row = results.rows.item[i];
    console.log('index:' +i+ '    val:' +val);
});

所以这似乎只影响 Safari 和 Mobile Safari,我发现以下内容足以满足我的需求。为可能处于相同情况的任何人添加。

由于 Safari 不会将 SqlResultsetRowList 视为数组,因此您需要从中创建一个数组。

var contacts = [];

for (i = 0; i < results.rows.length; i++){
    contacts.push(results.rows.item(i));
}

现在您已经根据结果创建了数组,您可以使用 $.each.

迭代 contacts
$.each(contacts, function() {
    var ID = this.Contact_ID;
    //more logic here
});