2009-04-28 9 views
1

I've been having a lot of problems with jQuery 1.3.2 auf nur einer meiner Websites. Es ist eine Joomla-Seite, daher ist Mootools auch auf der Seite enthalten (und es ist zu schwierig, Mootools zu entfernen). Grundsätzlich besteht das Problem darin, dass das Aufrufen des grundlegenden jQuery-Selektors mit einem Selektor (z. B .: "a", ".myClass", nicht"html a", ".myClass td") nur das erste Element zurückgibt.makeArray Funktion in Sizzle (jQuery 1.3)

Ich habe durch den Code getreten und haben es auf diese Funktion in der Sizzle Motor verengt:
(sehen Sie selbst, Linie 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; 
}; 

Ich werde es schreiben hier wieder mit Kommentaren, die Werte zeigen, dass ich jQuery("a") nach dem Aufruf worden Anmeldung haben:

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

Kann jemand diesen Code mir das erklären? Und auch, warum es alles außer einem meiner Elemente los ist ??

Antwort

6

Aaargh, ich habe es endlich gefunden. Ich verwendete eine ältere Version der Validation plugin, die nicht kompatibel mit jQuery 1.3+ war - es hatte seine eigene push Methode definiert, die nur das erste Element in das Array schob, und dies wurde anstelle der regulären jQuery-Methode aufgerufen.

Also lass dies eine Warnung an alle sein, die seltsame Sachen nach dem Upgrade erleben: Prüfe die Kompatibilität deiner Plugins !!

+1

Danke, dass Sie uns das gezeigt haben. –