$ .inArray в IE7 - PullRequest
       42

$ .inArray в IE7

2 голосов
/ 14 апреля 2011

Я использую jQuery, и у меня проблема с $.inArray в IE7.

$.inArray([],'test')

В IE7 это возвращает 0, но в Chrome он возвращает -1, как и должно.

Я проверял это в jQuery 1.4.4 и 1.5.2, и это одно и то же.

Почему $.inArray не возвращает одинаковое в разных браузерах?

РЕДАКТИРОВАТЬ : у меня были аргументы задом наперед, почему я этого не заметил?Но почему Chrome дал -1, а IE7 - 0?

1 Ответ

2 голосов
/ 14 апреля 2011

У вас есть параметры в обратном направлении.Сначала должен быть найден элемент, за которым следует массив.

Вот код (из 1.5.0):

  inArray: function( elem, array ) {
     if ( array.indexOf ) {
       return array.indexOf( elem );
     }

     for ( var i = 0, length = array.length; i < length; i++ ) {
       if ( array[ i ] === elem ) {
         return i;
       }
     }

     return -1;
    },

Теперь интересный вопрос: почему строка ".indexOf() "возвращает 0 в IE7, когда вы передаете пустой массив в качестве цели.Кто-то может знать, но я очень стараюсь не беспокоиться о том, почему сломанные части IE7 такие, какие они есть.

edit - интересное обновление: оказывается, что хотя приведенный выше кодопределенно есть в исходном коде jQuery, позже он будет переопределен.Вышеупомянутое определение находится в строке 691 в источнике 1.4.4, но позже, в строке 855, мы видим:

if ( indexOf ) {
  jQuery.inArray = function( elem, array ) {
    return indexOf.call( array, elem );
  };
}

Там, голая переменная "indexOf" является скрытой ссылкой на "Массив.prototype.indexOf».Когда это вызывается с ".call ()", со строкой в ​​качестве первого параметра и пустым массивом в качестве второго, вы получаете -1 назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...