it-swarm.dev

problema del metodo findIndex () con Internet Explorer

Sto facendo alcuni test con diversi browser usando il modulo Selenium::Remote::Driver .

Vorrei controllare se trovo qualche elemento nel mio elenco di siti web, elencato da un framework JavaScript (che crea griglie). In questo caso, devo usare lo snippet JavaScript permesso da Selenium::Remote::Driver.

Ho scritto il seguente codice

$script = q{

      var paramProgramName = arguments[0];

      var list  = $('#c-list').dxList('instance');
      var items = list.option('items');
      var index = items.findIndex(function(el){ return el.name == paramProgramName; });

      list.selectItem(index);

      return ;
};

$driver->execute_script($script, $programName);

Funziona bene con Chrome e Firefox, ma non con Internet Explorer perché il metodo findIndex è supportato solo dalla versione 12 e seguenti. Per qualche ragione devo usare la versione 11.

Cosa posso fare in modo diverso per ottenere un indice da ogni browser?

17
Chaoui05

Quindi la mia domanda è: come posso fare diversamente per ottenere il mio indice per ogni browser?

Hai almeno tre opzioni:

  1. Shim Array#findIndex; MDN ha uno shim/polyfill che puoi usare.

  2. Usa qualcos'altro di IE11, come Array#some (che anche IE9 ha):

    var index = -1;
    items.some(function(el, i) {
        if (el.name == paramProgramName) {
            index = i;
            return true;
        }
    });
    
  3. Usa qualcos'altro che anche IE8 ha, come for:

    var index = -1;
    for (var i = 0; i < items.length; ++i) {
        if (items[i].name == paramProgramName) {
            index = i;
            break;
        }
    }
    
56
T.J. Crowder

puoi usare http://underscorejs.org/

come usare:

var index = _.findIndex(objects, function(item){
return item.name == programName;
});
0
Hendra SYP