最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - lastIndexOf does not work in Internet Explorer - Stack Overflow

programmeradmin1浏览0评论

I have the following code:

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

But I find that the lastIndexOf does not work in InternetExplorer (It does in Chrome).

How can I fix this?

I have the following code:

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

But I find that the lastIndexOf does not work in InternetExplorer (It does in Chrome).

How can I fix this?

Share Improve this question asked Feb 7, 2013 at 9:30 user1646528user1646528 4372 gold badges7 silver badges15 bronze badges 2
  • According to W3School, lastIndexOf is supported by IE : w3schools./jsref/jsref_lastindexof.asp – sdespont Commented Feb 7, 2013 at 9:33
  • 7 @sdespont, would not be the first time w3schools was wrong – epoch Commented Feb 7, 2013 at 9:35
Add a ment  | 

3 Answers 3

Reset to default 7

According to the ES5 patability table, Array.prototype.lastIndexOf is supported in all browsers except IE8 and below.

If you need to support such browsers, you can use one of the various polyfills that are available (or a more plete ES5 polyfill solution).

Some browsers (IE) don't support a lot of JavaScript properties. I usually find a solution on mdn:

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

The code there:

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

lastIndexOf seems only be implemented in IE9/10. You need to use a shim to support it. See: ES5-shim, line 509-535 in particular.

发布评论

评论列表(0)

  1. 暂无评论