Вопрос по javascript-objects, jquery, arrays, javascript – Javascript методы, которые нельзя вызвать из объектов jquery?

7

Я читал Learning jQuery 1.3 (Джонатан Чаффер и Карл Сведберг), и во время сортировки таблицы они использовали.get() перед звонком.sort(), и сказал

we need to transform jQuery objects into array of DOM nodes. Even though jQuery objects act like arrays in many respects , they don't have any of the native array methods available, such as .sort().

Код:

$("#sort").click(function() {
        var posts = $("#posts_div .post");
        posts.sort(function(a, b) {
           return ($(a).text()) > ($(b).text());
        });       
        $.each(posts, function(index, post) { $("#posts_div").append(post); });
});​

Поэтому я попытался сделать это без использования.get(), но неожиданно это сработало даже без.get() с последним jQuery, но не работал с 1.3

Так что сделал несколько скрипок, чтобы было понятно

** не работает без.get() jquery 1.2.6 **

Работать с.get() jquery 1.2.6

Работает без.get() jquery 1.7.2

Работать с.get() jquery 1.7.2

Поэтому очевидно, что ранее объекты jQuery раньше не имели.sort() функционировать так же, как массивы Javascript? Но теперь у них есть ..

Поэтому мой вопрос в том, какие функции еще не поддерживаются объектами jQuery, поэтому мы можем помнить о необходимости преобразования в массивы Javascript перед их использованием ??

@RajatSinghal Нет. The.get() Функция предназначена для предоставления вам доступа к самим элементам DOM, поэтому возвращаемый массив представляет собой массив элементов DOM, а не объектов jQuery. Anthony Grist
@AnthonyGrist, когда у нас есть селектор, возвращающий несколько элементов, это не массив объектов jquery ?? Rajat Singhal
И еще одна причина, по которой я не использую jQuery. Niet the Dark Absol
Вы не должны полагаться на недокументированные функции любой библиотеки - они могут измениться в любую минуту. В этом конкретном случае просто продолжайте и получите истинный массив элементов DOM перед выполнением операций с массивами. Andrew Whitaker
Чтобы обратиться к последнему пункту: Нет, это не объект jQuery. В целом, это объект jQuery, который содержит элементы DOM, поэтомуa а такжеb (будучи отдельными элементами внутри объекта) являются элементами DOM. Anthony Grist

Ваш Ответ

2   ответа
4

var methods = 'pop push reverse shift sort splice unshift concat join slice toString indexOf lastIndexOf filter forEach every map some reduce reduceRight'.split(' ')
var implemented = $.grep(methods, function(m) {
    return $.prototype[m] == Array.prototype[m];
});
console.log(implemented); // => ["push", "sort", "splice"]

У них также естьsliceно это не то же самоеslice так как массивы имеют:

$.prototype.slice === Array.prototype.slice // => false
1

.sort метод, он просто официально не задокументирован, потому что он не соответствует обычному формату методов jQuery.

Поддерживаются только те методы, которые перечислены вапи.

.sort реализован как:

$.fn.sort = [].sort;

Вы можете добавить свои собственные дополнительные методы массива по мере необходимости таким же образом.

$.fn.reverse = [].reverse;

Если.sort не реализован в вашей версии jQuery, реализуйте его самостоятельно.

Похожие вопросы