Функция makeArray в Sizzle (jQuery 1.3) - PullRequest
1 голос
/ 28 апреля 2009

У меня было много проблем с jQuery 1.3.2 только на одном из моих сайтов. Это сайт Joomla, поэтому Mootools также присутствует на странице (и удалить Mootools слишком сложно). В основном проблема заключается в том, что вызов базового селектора jQuery с одним селектором (например: "a", ".myClass", not "html a", ".myClass td") вернет только первый элемент.

Я прошел через код и сузил его до этой функции в движке Sizzle:
(посмотрите сами, строка 2058 jquery.js )

var makeArray = function(array, results) {
    array = Array.prototype.slice.call( array );
    if ( results ) {
        results.push.apply( results, array );
        return results;
    }
    return array;
};

Я напишу здесь снова с комментариями, чтобы показать значения, которые я регистрировал после вызова jQuery("a"):

var makeArray = function(array, results) {
    // "array" is an array of all the 58 links on the page
    // "results" is an empty jQuery object

    array = Array.prototype.slice.call( array );

    // array is unchanged.

    if ( results ) {   // true
        results.push.apply( results, array );
        // "results" is now an array only holding the FIRST element.
        return results;
    }
    return array;
};

Может кто-нибудь объяснить мне этот код? А также почему он избавляется от всех, кроме одного из моих элементов ??

1 Ответ

6 голосов
/ 28 апреля 2009

Ааааа, я наконец нашел это. Я использовал более старую версию плагина Validation , которая была несовместима с jQuery 1.3+ - он определил свой собственный метод push, который только помещал первый элемент в массив, и это называлось вместо обычного метода jQuery.

Так что пусть это будет предупреждением для всех, кто испытывает странные вещи после обновления: проверьте совместимость ваших плагинов !!

...