"elems.sort не является функцией" в jQuery 1.3.1 - PullRequest
3 голосов
/ 14 марта 2011

Мне нужно было рандомизировать варианты ответов для небольшой игры, которую я создаю, используя html / jquery.

Я столкнулся с плагином jQuery Randomize , опубликованным Russ Cam на Stack Overflow в октябре 2009 г. (см. здесь: Произведите рандомизацию последовательности элементов div с помощью jQuery ).

Этот плагин прекрасно работает в качестве решения .... КРОМЕ ...

По некоторым причинам он не работает с jQuery 1.3.1. Firebug выдает ошибку (« elems.sort не является функцией ») в этой строке:

elems.sort(function() { return (Math.round(Math.random())-0.5); }); 

Теперь, если я включу jQuery 1.3.2 в свой тестовый файл вместо 1.3.1, он будет работать как по волшебству.

Но есть загвоздка. Сайт, для которого я создаю игру, заблокирован в jQuery 1.3.1. Это нельзя изменить.

Итак, две вещи:

  1. Может кто-нибудь помочь мне понять, что не так, или почему это не работает? Что сломано или отсутствует в jQuery 1.3.1? Я новичок в JS / JQuery.

  2. Может кто-нибудь предложить обходной путь? Альтернативный способ написать эту строку, которая может работать в 1.3.1?

1 Ответ

4 голосов
/ 14 марта 2011

Начиная с jQuery 1.3.2 и далее, jQuery предоставил нативную функцию Array.prototype.sort для работы с объектом jQuery.

С jQuery 1.3.1 вы не можете напрямую использовать sort для объекта jQuery, но достаточно просто преобразовать объект jQuery в собственный массив, чтобы применить сортировку:

var elems = $this.children(childElem).get(); // notice the .get()
elems.sort(function() { return (Math.round(Math.random())-0.5); });
...