3

次のコードがあります。

        var currentServerlist = [];
        var newServerIp = document.getElementById('add_server').value; 
        if( CurrentServerIP != newServerIp )
        {
            $('#failoverServers td.row_selector').each(function() {
            var row = $(this).closest('tr');
            var serverIp = row.find('td[rel=ip]').text();
            currentServerlist.push(serverIp);   
            });

            if(currentServerlist.lastIndexOf(newServerIp) != -1)
            {
                return true;
            }
            return false;
         }

しかし、lastIndexOf は InternetExplorer では機能しないことがわかりました (Chrome では機能します)。

どうすればこれを修正できますか?

4

3 に答える 3

7

ES5 互換性テーブルによると、Array.prototype.lastIndexOfIE8 以下を除くすべてのブラウザでサポートされています。

このようなブラウザをサポートする必要がある場合は、利用可能なさまざまなポリフィルの 1 つ(またはより完全な ES5 ポリフィル ソリューション) を使用できます。

于 2013-02-07T09:33:37.053 に答える
1

一部のブラウザー (IE) は、多くの JavaScript プロパティをサポートしていません。私は通常、mdn で解決策を見つけます。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/lastIndexOf

そこのコード:

if (!Array.prototype.lastIndexOf)
{
  Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/)
  {
    "use strict";

    if (this == null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = len;
    if (arguments.length > 1)
    {
      n = Number(arguments[1]);
      if (n != n)
        n = 0;
      else if (n != 0 && n != (1 / 0) && n != -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    var k = n >= 0
          ? Math.min(n, len - 1)
          : len - Math.abs(n);

    for (; k >= 0; k--)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}
于 2013-02-07T09:33:40.410 に答える
0

lastIndexOfは IE9/10 でのみ実装されているようです。それを支えるためにシムを使用する必要があります。参照: ES5-shim 、特に509 ~ 535行。

于 2013-02-07T09:34:13.500 に答える