6
votes

Que se passe-t-il quand un sélecteur de jQuery n'a pas été trouvé?

Si je passe un sélecteur en tant que paramètre sur une fonction. xxx

évidemment, l'événement Neveras jamais si le sélecteur qui a été transmis n'a pas eu ce événement , mais dois-je vérifier une condition de condition avant de déclencher l'événement? Je veux dire: xxx

ou simplement le laisser ...


1 commentaires

JQuery Selectors sont des chaînes simples (par exemple "Div.Main H2" ) Donc, je suppose que vous donnez ce nom à un autre concept. Pouvez-vous clarifier?


5 Réponses :


1
votes

déclencher simplement l'événement ..

Mais la variable sélecteur doit être un objet JQuery ( avec la syntaxe que vous utilisez ).


0 commentaires

6
votes

La bonne chose à propos de JQuery est que cela ne jettera pas une exception ou provoquera une erreur si le sélecteur ne correspond pas. Donc, vous n'avez pas besoin de faire quelque chose de plus; Ceci est une opération sûre:

// selector **must** be a jQuery object
// the assumption here is that you've already done 
// var selector = $('selectorString'); elsewhere
// and have invoked this function with selector
function(selector){
  selector.trigger('eventHere');
}


7 commentaires

En tant que note de bas de page à votre grande suggestion, cela peut être de tester si un objet JQuery est null ou a une longueur de 0 avant l'exécution d'une fonction contre elle. Juste parce que cela ne jettera pas une erreur ne signifie pas que la performance ne peut pas être gagnée en ne l'exécutant pas en premier lieu (JQuery essaie toujours).


@Adam qui ressemble à une bonne idée - mais j'imagine que la recherche de matchs pour une chaîne de sélection serait l'opération la plus chère de JQuery. Invoquant une fonction sur des éléments, une fois trouvé, devrait être relativement peu coûteux. Les pensées? Références / chiffres montrant le contraire? Je serais intéressé à savoir si l'ajout du si (sélecteur) au code ci-dessus aurait un impact positif.


@Nogood - L'impact est relativement petit par rapport à certains problèmes de performance, mais ça vaut la peine de faire. Voici un test JSperf pour le prouver: JSPERF.COM/ ... Je vois un gain d'amélioration de 19% en testant d'abord un résultat en chrome.


@Adam merci d'avoir montré cela - il convient de garder à l'esprit certainement. Supposez-vous que ce soit l'erreur de manipulation des frais généraux qui provoque le ralentissement?


En ce qui concerne votre édition, pour être juste, je n'ai pas créé le test JSPERF, simplement le péru. Quant au pourquoi, c'est simplement que JQuery fait beaucoup de choses quelles que soient la longueur. Prenant l'exemple de JSPERF de Supprimer () , regarde code. jquery.com/jquery-1.5.2.js et rechercher Supprimer: fonction pour trouver la définition. Vous verrez que c'est des tests pour différents types, collections, création d'événements, etc. Ce n'est pas dû au traitement des erreurs - en fait, uniquement dans de rares cas JQuery doit effectivement utiliser des blocs d'essayer / attraper.


Merci Adam, c'était définitivement très instructif!


Bientôt, vous aurez besoin d'un nouveau nom d'utilisateur.



0
votes

Si vous voulez vous assurer que l'événement ne sera déclenché que pour un type d'élément donné, vous pouvez vérifier cela avant de déclencher l'événement.

if (selector.get(0).tagName=="tag name") {
   //then fire event
}


3 commentaires

Le point de vue de JQuery n'est-il pas le point que vous le savez déjà à l'avance?


Selon Op, l'hypothèse est que la fonction sera appelée même pour les sélecteurs (éléments) qui ne prend pas en charge l'événement enregistré.


Dans ce cas, sélecteur.is ("type d'élément") retournera toujours false dans votre exemple et doit être itérai.



5
votes

jQuery renvoie toujours une gamme d'éléments, même si le sélecteur n'a renvoyé aucun élément, il contiendra un tableau vide.

Vous pouvez toujours exécuter n'importe quelle fonction sur ce tableau vide sans jQuery lancer une erreur, il y a donc Pas besoin de vérifier si les éléments retournés existent.

Si l'élément n'a pas de tel événement à déclencher, vous essayez de le déclencher, rien ne se passera, aucune exception ne sera lancée, à nouveau; Pas besoin de vérifier.

Veuillez également noter que si vous insistez sur le passage d'un sélecteur à votre objet, vous devez toujours récupérer des objets à l'aide du sélecteur avant de pouvoir faire quelque chose avec eux. < Pré> xxx


0 commentaires

1
votes

Si la création de l'objet JQuery ne correspond à aucun élément, il s'agira toujours d'un objet JQuery mais avec des éléments zéro à l'intérieur. La plupart des méthodes que vous effectuez sur un objet JQuery peuvent gérer n'importe quel nombre d'éléments, notamment zéro, donc si vous voulez simplement ne rien faire, vous ne devez rien faire de contrôle.

Ce n'est que si vous voulez faire quelque chose de spécial quand La collection est vide que vous devez vérifier pour cela, et vous le faites en cochant la propriété Propriété: xxx

Notez qu'un "sélecteur" est la chaîne que vous utilisez pour spécifier quels éléments à placer dans un objet JQuery, comme la chaîne #main dans le code $ ('# main ") , appelant donc un JQuery Object "Sélecteur" peut être déroutant.


0 commentaires