2010-08-03 4 views
4

Il ne fait pas dans FF/Chrome et je ne pense pas qu'il devrait dans IE. après tout $() ne renvoie pas un objet simple, mais une instance de $. Ai-je tort?

Répondre

6

Réponse courte:non, vous n'êtes pas fou, il est en effet un bug dans le noyau jQuery.


Réponse longue:

je configurer un test rapide pour voir ce que la différence est ici: http://jsfiddle.net/nick_craver/9J3VP/

La liste des biens diffère dans son ordre dans IE (8 au moins), donc cette partie (from jQuery core):

var key; 
for (key in obj) { } 

Il saisissant la dernière propriété dans la liste et de faire une hasOwnProperty contrôle là-dessus, il est donc bouillir jusqu'à ce dans IE:

Object.prototype.hasOwnProperty.call($(document.body), 'length') //true 

et cela dans d'autres navigateurs (testé FF/Chrome):

Object.prototype.hasOwnProperty.call($(document.body), 'width') //false 

Depuis cette liste de propriété est commandé différemment, il est saisissant dans les autres navigateurs, nous obtenons un résultat différent (pour les coups de pied, cliquez pour inclure l'interface utilisateur jQuery sur la gauche, regardez-la changer pour une autre propriété personnalisée, tabs). This comment above the for loop:

// Own properties are enumerated firstly, so to speed up, 
// if last one is own, then all properties are own. 

est une hypothèse fausse au sujet de l'ordre des propriétés de IE, donc je considère cela comme un bug de jQuery 1.4.2.

Questions connexes