Table des matières
Le code d'origine :
data部分
AJAX部分
其他细节
Maison interface Web js tutoriel Une introduction à quelques détails améliorés de jQuery

Une introduction à quelques détails améliorés de jQuery

Jun 19, 2017 am 11:08 AM
jquery 介绍 改进 détail

jquery API”>jQuery 1.5 beta1 est sorti En termes d'apprentissage et de suivi, cette fois c'est relativement tard (je ne sais même pas quand la 1.5 est sortie en alpha, c'est juste une bêta

La plus grande mise à jour de la version 1.5 est la réécriture complète d'AJAX, qui offre une plus grande évolutivité. Cependant, en raison de limitations d'énergie et d'espace, l'analyse du nouvel AJAX sera laissée à une autre fois. les détails.

jQuery._Deferred et jQuery.Deferred

Tout d'abord, je dois parler de ces deux nouvelles choses, car elles existent en tant qu'infrastructure, et je ne les comprends pas. les choses clairement. Certains problèmes ne peuvent pas être expliqués du tout.

Tout d'abord,

est une version améliorée de jQuery.Deferred, donc commencer par jQuery._Deferred peut expliquer la plupart du problème >Ce qui est différé. ? Littéralement, ma première réaction est "chargement paresseux", la première lettre en majuscule devrait être la définition de "type", donc c'est probablement un type qui "fournit de manière transparente une fonction de chargement paresseux". un peu de "retard", cette chose n'est pas utilisée pour implémenter un chargement paresseux jQuery._Deferred

En termes simples,

est une file d'attente de fonctions, et ses fonctions sont les suivantes :

jQuery._Deferred

Enregistrez plusieurs fonctions.
  • Exécutez toutes les fonctions enregistrées à un moment précis >
  • Après l'exécution, la fonction nouvellement saisie sera exécutée immédiatement. .

  • Est-ce que cela ressemble à quelque chose ? Oui, la fonction ready de jQuery a une telle logique. En fait, la fonction ready de jQuery 1.5 a bien été greffée sur cela. >

    fournit l'interface suivante :

:

formulaire, utilisé pour ajouter des fonctions à la file d'attente jQuery._Deferred

    :
  • formulaire, utilisez

    pour spécifier donecetfunction(fn1, fn2, …) objet,

    Spécifiez les paramètres et appelez toutes les fonctions de la file d'attente. Après l'appel de
  • , _Deferred entrera dans l'état
  • isResolved

    , et les futurs appels à fire ne sauvegarderont pas la fonction, mais appelleront directement la fonction function(context, args)contextargs : équivalent à l'appel de fire, une méthode simplifiée done

     : Utilisé pour déterminer si le statut _Deferred est présent.
  • isResolved
  • , reportez-vous à l'explication de la fonction

    précédente pour plus de détails. >resolvefire(this, arguments) : Annulez toute la file d'attente, de sorte que peu importe si c'est

    à l'avenir, aucune fonction dans la file d'attente ne sera à nouveau appelée
  • isResolved Allons. jetez un œil à . Cette chose est en fait composée de deux _Deferreds. Le premier est appelé deferredfire, qui est utilisé pour stocker les fonctions dans l'état "normal".

    failDeferred
  • , qui est utilisé pour stocker les fonctions dans l'état "erreur". En parallèle,
  • propose de nouvelles interfaces :

    cancelfire

  •  : sous la forme de
, ajoutez

à jQuery._Deferred et jQuery.Deferred à . jQuery.Deferred

 : Équivalent à la fonction
    de
  • .

    thenfunction(done, fail)donedeferred : Équivalent à la fonction fail de failedDeferred.

  • fail : Équivalent à la fonction failDeferred de done.

  • fireReject : Équivalent à la fonction failDeferred de fire.

  • Dans le même temps, reject a annulé la fonction failDeferred. resolve

    Alors, à quoi ça sert ? Il y a deux états "normal" et "erreur", et c'est asynchrone en même temps. C'est facile à imaginer... Oui, c'est utilisé pour AJAX, je l'expliquerai en détail dans la prochaine analyse.
  • Modifications dans jQuery.ready

    isRejectedEn raison de la chose failDeferred, la fonction isResolved devient dépendante de la file d'attente des fonctions. Les modifications spécifiques sont :

  • Original L'original. La variable
n'est plus un tableau, mais devient un objet

. jQuery.Deferredcancel À l'origine, la logique d'appeler toutes les fonctions dans

lorsque

DOMContentLoaded

est désormais également utilisée dans

Le code d'origine :

jQuery._Deferred change C'est. done : jQuery.ready

la fonction jQuery.parseXML readyListjQuery._Deferred a ajouté une fonction statique

pour fournir une conversion compatible avec le navigateur de la

chaîne vers la fonctionnalité de document XML. readListIl existe de nombreuses logiques pour cette fonction, et il n'y a rien de spécial à propos de jQuery. Elles sont grossièrement divisées en deux types suivants : jQuery._Deferred

Pour les navigateurs standards, utilisez l'objet
while ( (fn = ready[ i++ ]) ) {       fn.call( document, jQuery ); }
Copier après la connexion
 : <.>

Pour IE, utilisez l'objet
readyList.fire( document , [ jQuery ] );
Copier après la connexion
 :

var parser = new ActiveXObject('Microsoft.XMLDOM');   parser.async = 'false';   parser.loadXML(text);   var xml = parser.documentElement;
Copier après la connexion

data部分

添加了jQuery.hasData函数,用于判断一个元素是否有jQuery附加上去的数据。

修改了jQuery.expando的实现,在原来单纯地取当前时间的基础上,添加了一个随机数:

expando = "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( //D/g, "" );
Copier après la connexion

这样保证在同一时间,引入多个jQuery副本,这几个副本之间的expando不会相互冲突,导致元素上的data变得错乱。一般来说,是不会引入多个jQuery副本的,但是使用SealJS等的时候,配置不当的话,也是很容易出现此类问题的。

DOM操作部分

原本的hasClassaddClassremoveClass函数都需要将元素的class属性分隔为数组,在1.4.4版本中,通过/n或/t进行分隔,在1.5中增加了一个/r,用于对应Windows平台下的换行符(/r/n)。

jQuery.fn.attr函数,1.4.4版本中拒绝从TextNode和CommentNode上获取属性,在1.5版本中添加了一个AttributeNode(noteType == 2)。

在1.4.4版本中,jQuery会在页面unload的时候清理掉由jQuery维护的所有DOM事件,这是为了避免IE的内存泄露问题。但是在1.5中这一段代码不见了,不知是出于什么考虑。

对于IE下使用cloneNode复制节点,会将事件也一起复制过来的问题,1.4.4中是采取复制innerHTML的方式给予解决,而在1.5中则采纳了mootools团队提供的方法,使用cloneFixAttribute函数修正该问题。

cloneFixAttribute函数们于jQuery 1.5 beta1源码文件的5388-5438行,处理IE的BUG的原理很简单,当然前端里一些看似简单的东西,都是很难发现的:

  • IE中有个叫clearAttributes的函数,会清除到节点上的所有属性,顺便把和事件相关的<a href="http://www.php.cn/wiki/1449.html" target="_blank">onclick</a>之类的属性也去掉了。在复制出来的节点上调用这个函数,就会把属性清得干干净净。

  • IE中还有一个叫mergeAttributes的函数,把一个节点的属性复制到另一个节点上,但他不会把和事件相关的属性复制过去。所以再把原始节点调用mergeAttributes,把属性重新放回复制出来的节点上,这就相当于起到了去除事件相关属性的作用。

另外cloneFixAttribute函数还处理了非常多IE6-8在cloneNode上的兼容性问题,非常值得详细研究。

AJAX部分

AJAX已经完全重写了,只留下一点边边角角保留着1.4.4版本的风采,这里只抽取一部分进行简单的说明。

原来版本中$.get$.post的实现非常相似,具体来说仅有一个method配置项不同,因此在1.5版本中被合并起来了:

$.each(['get', 'post'], function(i, method) {     $[method] = function() { ... }; });
Copier après la connexion

ajaxSetup函数现在加了一行return this;,可以链式调用了。

serializeArray函数现在统一将value中的换行符替换成Windows的风格(/r/n)。

AJAX的回调函数中,作为参数的对象不再是原生的XMLHTTPRequest,而是jQuery自己封装的称为jXHR的对象,这个对象提供了XMLHTTPRequest的常用接口。

原本对于“请求成功”的浏览器状态码,除200-299以及304外,还有一个1223,来自于IE的一个BUG,会将204的状态码变成1223。现在因为有了jXHR对象,相当于中间多了一层,因此从jXHR对象获取statusCode不会出现1223的情况,已经被变回204了。

jQuery.ajax函数的配置项中多了一个statusCode项,其结构为map,用于指定返回特定状态码时的回调函数,大致形式如下:

jQuery.ajax({       url: 'xxx',     statusCode: {         200: function() { 处理请求成功 },         404: function() { 处理页面未找到 },         503: function() { 处理Service Unavailable }     } });
Copier après la connexion

再添加了这个回调后,jQuery.ajax函数已经有非常多的回调函数,其触发过程如下:

  1. 根据返回的状态码,触发success或者error回调。

  2. 根据状态码,触发对应的statusCode回调。

  3. 触发complete回调。

  4. 触发全局ajaxComplete回调。

  5. 如果此时没有正在执行的AJAX,触发全局ajaxStop回调。

其他细节

入口函数jQuery.fn.init现在多了一个参数,值始终为rootjQuery,用于加速init函数中对rootjQuery变量的查找速度(减少了一层作用域):

// jQuery 1.5 beta1 源码23行 jQuery = function( selector, context ) {       // The jQuery object is actually just the init constructor 'enhanced'     return new jQuery.fn.init( selector, context, rootjQuery ); }
Copier après la connexion

jQuery对象支持继承了,具体的修改是将几处直接调用jQuery的代码改为了对this.constructor的调用:

// 202行:     return this.constructor( context ).find( selector ); // 253行:     var ret = this.constructor(); // 334行: return this.prevObject || this.constructor(null);
Copier après la connexion

同时还提供了jQuery.subclass函数用于创建一个继承自jQuery的类型,由于不是很常用jQuery,更是从来没有用到过需要继承jQuery的情况,因此也不方便说这个功能的作用有多大。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la méthode de requête PUT dans jQuery ? Comment utiliser la méthode de requête PUT dans jQuery ? Feb 28, 2024 pm 03:12 PM

Comment utiliser la méthode de requête PUT dans jQuery ? Dans jQuery, la méthode d'envoi d'une requête PUT est similaire à l'envoi d'autres types de requêtes, mais vous devez faire attention à certains détails et paramètres. Les requêtes PUT sont généralement utilisées pour mettre à jour des ressources, comme la mise à jour de données dans une base de données ou la mise à jour de fichiers sur le serveur. Ce qui suit est un exemple de code spécifique utilisant la méthode de requête PUT dans jQuery. Tout d'abord, assurez-vous d'inclure le fichier de la bibliothèque jQuery, puis vous pourrez envoyer une requête PUT via : $.ajax({u

Introduction détaillée des fonctions du Samsung S24ai Introduction détaillée des fonctions du Samsung S24ai Jun 24, 2024 am 11:18 AM

2024 est la première année des téléphones mobiles IA. De plus en plus de téléphones mobiles intègrent plusieurs fonctions IA. Grâce à la technologie intelligente IA, nos téléphones mobiles peuvent être utilisés plus efficacement et plus facilement. Récemment, la série Galaxy S24 lancée au début de l’année a encore une fois amélioré son expérience d’IA générative. Jetons un coup d’œil à l’introduction détaillée des fonctions ci-dessous. 1. Autonomisation profonde de l'IA générative. La série Samsung Galaxy S24 a apporté de nombreuses applications intelligentes grâce à l'autonomisation du Galaxy AI. Ces fonctions sont profondément intégrées à Samsung One UI6.1, permettant aux utilisateurs d'obtenir une expérience intelligente pratique à tout moment, de manière significative. améliorer les performances des téléphones mobiles. La fonction de recherche instantanée lancée par la série Galaxy S24 est l’un des points forts. Il suffit aux utilisateurs d’appuyer longuement.

Conseils jQuery : modifiez rapidement le texte de toutes les balises a de la page Conseils jQuery : modifiez rapidement le texte de toutes les balises a de la page Feb 28, 2024 pm 09:06 PM

Titre : jQuery Astuces : Modifier rapidement le texte de toutes les balises a de la page En développement web, nous avons souvent besoin de modifier et d'exploiter des éléments de la page. Lorsque vous utilisez jQuery, vous devez parfois modifier le contenu textuel de toutes les balises de la page en même temps, ce qui peut économiser du temps et de l'énergie. Ce qui suit explique comment utiliser jQuery pour modifier rapidement le texte de toutes les balises a de la page et donne des exemples de code spécifiques. Tout d'abord, nous devons introduire le fichier de la bibliothèque jQuery et nous assurer que le code suivant est introduit dans la page : &lt

Utilisez jQuery pour modifier le contenu textuel de toutes les balises Utilisez jQuery pour modifier le contenu textuel de toutes les balises Feb 28, 2024 pm 05:42 PM

Titre : utilisez jQuery pour modifier le contenu textuel de toutes les balises. jQuery est une bibliothèque JavaScript populaire largement utilisée pour gérer les opérations DOM. En développement web, nous rencontrons souvent le besoin de modifier le contenu textuel de la balise de lien (une balise) sur la page. Cet article expliquera comment utiliser jQuery pour atteindre cet objectif et fournira des exemples de code spécifiques. Tout d’abord, nous devons introduire la bibliothèque jQuery dans la page. Ajoutez le code suivant dans le fichier HTML :

Introduction aux compétences et attributs de Hua Yishan Heart of the Moon Lu Shu Introduction aux compétences et attributs de Hua Yishan Heart of the Moon Lu Shu Mar 23, 2024 pm 05:30 PM

Dans Hua Yishan Heart Moon, Lu Shu est une célébrité SSR. Il se positionne comme un joueur de backline à cible unique et a un taux de coup critique très impressionnant. De nombreux joueurs ne connaissent pas grand-chose de Lu Shu. . Venez jeter un œil à l’introduction aux compétences et attributs de Hua Yishan Heart of the Moon Lu Shu. Attributs de célébrité Compétences de célébrité 1. Description de la compétence de Lu Ming Shuzhong : Lu Shu est né à Qiongqihui à Shuzhong. Il pratique les arts martiaux depuis qu'il est enfant et possède des compétences exceptionnelles en arts martiaux. Inflige des dégâts d'attaque de base égaux à 100 % de la puissance d'attaque de la rangée arrière de l'ennemi et réduit la rage de la cible de 10 points. Attributs de compétence : Niveau 2 : Dégâts d'attaque de base augmentés à 105 %. Niveau 2 : Les dégâts de l'attaque de base sont augmentés à 110 % et la rage de la cible est réduite de 15 points. Niveau 2 : Dégâts d'attaque de base augmentés à 115 %. Niveau 2 : Les dégâts de l'attaque de base sont augmentés à 120 % et la rage de la cible est réduite de 20 points. Niveau 2 : Attaque de base

Qu'est-ce que Dogecoin Qu'est-ce que Dogecoin Apr 01, 2024 pm 04:46 PM

Dogecoin est une crypto-monnaie créée sur la base de mèmes Internet, sans plafond d'approvisionnement fixe, avec des délais de transaction rapides, des frais de transaction faibles et une grande communauté de mèmes. Les utilisations incluent les petites transactions, les pourboires et les dons de bienfaisance. Cependant, son offre illimitée, la volatilité du marché et son statut de pièce de monnaie farfelue comportent également des risques et des inquiétudes. Qu’est-ce que Dogecoin ? Dogecoin est une crypto-monnaie créée à partir de mèmes et de blagues Internet. Origine et histoire : Dogecoin a été créé en décembre 2013 par deux ingénieurs logiciels, Billy Markus et Jackson Palmer. Inspiré du mème alors populaire « Doge », une photo comique représentant un Shiba Inu avec un anglais approximatif. Caractéristiques et avantages : Offre illimitée : contrairement à d’autres crypto-monnaies telles que Bitcoin

Améliorations de PHP7 : plus d'erreurs indéfinies Améliorations de PHP7 : plus d'erreurs indéfinies Mar 04, 2024 pm 06:15 PM

Améliorations de PHP7 : Fini les erreurs non définies. PHP7 est une mise à jour majeure du langage PHP, qui apporte de nombreuses améliorations et optimisations importantes. L'une des améliorations significatives est que les erreurs non définies n'apparaissent plus lors du traitement de variables non définies, ce qui apporte une meilleure expérience utilisateur aux développeurs. Avant PHP7, si des variables non définies étaient utilisées dans le code, une erreur non définie se produisait. Les développeurs devaient vérifier ou définir manuellement le niveau de rapport d'erreurs pour éviter cette situation.

Introduction à la plateforme de vérification des scores en ligne (outil de requête de score pratique et rapide) Introduction à la plateforme de vérification des scores en ligne (outil de requête de score pratique et rapide) Apr 30, 2024 pm 08:19 PM

Les outils d'interrogation rapide des scores offrent plus de commodité aux étudiants et aux parents. Avec le développement d'Internet, de plus en plus d'établissements d'enseignement et d'écoles ont commencé à proposer des services de vérification des scores en ligne. Pour vous permettre de suivre facilement les progrès scolaires de votre enfant, cet article présentera plusieurs plateformes de vérification des scores en ligne couramment utilisées. 1. Commodité - Les parents peuvent vérifier les résultats des tests de leurs enfants à tout moment et n'importe où via la plateforme de vérification des scores en ligne. Les parents peuvent facilement vérifier les résultats des tests de leurs enfants à tout moment en se connectant à la plateforme de vérification des scores en ligne correspondante sur un ordinateur ou un téléphone mobile. Tant qu'il y a une connexion Internet, que ce soit au travail ou en dehors, les parents peuvent se tenir au courant de l'état d'apprentissage de leurs enfants et fournir des conseils et une aide ciblés à leurs enfants. 2. Fonctions multiples - en plus de la requête de scores, il propose également de nombreuses recherches en ligne d'informations telles que les horaires de cours et les modalités d'examen.

See all articles