9

Zrobiłem kilka testów z różnymi przeglądarkami. Używam dla tego Selenium :: Remote :: Driver. Chciałbym sprawdzić, czy znajdę element na mojej liście stron internetowych, listę z frameworka js (który tworzy siatki). W tym przypadku muszę użyć fragmentu kodu JavaScript dozwolonego przez Selenium :: Remote :: Driver. zrobiłem następujący kod:Problem metody findIndex() z eksploratorem internetowym

$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); 

Współpracuje z Chrome i Firefox. Mój problem polega na tym, że mój kod nie działa z internet.explorer, ponieważ metoda findIndex() jest obsługiwana tylko przez 12 i następnych. I z jakichś powodów muszę używać Internet.explorer 11.

Moje pytanie brzmi: jak mogę zrobić inaczej, aby uzyskać mój indeks dla każdej przeglądarki?

Dzięki

Odpowiedz

29

Więc moje pytanie brzmi: w jaki sposób można to zrobić inaczej, aby mój indeks dla każdej przeglądarce?

mieć co najmniej trzy opcje:

  1. Podkładka regulacyjna Array#findIndex; MDN ma shim/polyfill, którego możesz użyć.

  2. użyć czegoś innego, że IE11 ma, takie jak Array#some:

    var index = -1; 
    items.some(function(el, i) { 
        if (el.name == paramProgramName) { 
         index = i; 
         return true; 
        } 
    }); 
    
  3. użyć czegoś innego, nawet IE8 ma, takie jak for:

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

Dzięki za odpowiedź @ T.J. Najpierw Crowder! Nie jestem bardzo znany z Shim, ale i tak się rozejrzę. Na drugi sposób, przetestuję to, a ja udzielę ci odpowiedzi. – Chaoui05

+0

Jest doskonały. Jeszcze raz dziękuję – Chaoui05

+0

:). Zrobione ! odpowiedział na moje pytanie – Chaoui05

0

Lepszy sposób:

var findArrayIndex = function (array, predicateFunction) { 
    var length = array == null ? 0 : array.length; 
    if (!length) { 
     return -1; 
    } 
    var index = -1; 
    for (var i = 0; i < array.length; ++i) { 
     if(predicateFunction(array[i])) { 
      index = i; 
      break; 
     } 
    } 
    return index; 
} 

Użycie:

findArrayIndex(cachedAnnouncementsArray, function(o){return o.ID == 17;});