9

我正在做一些不同瀏覽器的測試。我用於Selenium :: Remote :: Driver。 我想檢查我是否在我的網站列表中找到一些項目,從框架js(它創建網格)列表。在這種情況下,我必須使用Selenium :: Remote :: Driver允許的JavaScript片段。 我做了以下代碼:與Internet Explorer findIndex()方法問題

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

它適用於Chrome和Firefox。我的問題是,我的代碼不適用於internet.explorer,因爲findIndex()方法僅支持12和以下版本。由於某些原因,我不得不使用internet.explorer 11.

所以我的問題是我怎樣才能以不同的方式獲得每個瀏覽器的索引?

感謝

回答

29

所以我的問題是,我該怎麼辦不同讓我的指數爲每一個瀏覽器?

你至少有三種選擇:

  1. Array#findIndex; MDN有一個墊片/ polyfill可以使用。

  2. 使用別的,IE11有,如Array#some

    var index = -1; 
    items.some(function(el, i) { 
        if (el.name == paramProgramName) { 
         index = i; 
         return true; 
        } 
    }); 
    
  3. 使用別的東西,即使IE8有,如for

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

感謝您的回覆@ T.J。首先是Crowder!我不喜歡Shim,但我會看看。對於第二種方式,我會測試它,我會重新回答你一個答案。 – Chaoui05

+0

這很完美。再次感謝 – Chaoui05

+0

:)。完成 !它回答了我的問題 – Chaoui05

0

更好的辦法:

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; 
} 

用法:

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