2009-06-27 9 views
7

Si j'avais deux divs, les deux avec id = "myDiv"Est-ce que dupliquer les sélecteurs jquery de l'id?

Est-ce que $("#myDiv").fadeOut(); se fanait les deux divs? Ou serait-il fané seulement le premier/deuxième? Ou pas du tout?

Comment changer le fondu? Je sais que les ID en double sont contre les standards mais j'utilise le popup modal de fancybox et il duplique le contenu spécifié sur votre page pour le contenu du popup. Si quelqu'un connaît un moyen de contourner cela (peut-être que j'utilise fancybox mal) s'il vous plaît faites le moi savoir.

+1

Avez-vous essayé? –

+0

Oui, mais j'espérais que si je demandais à quelqu'un d'autre, ils pourraient m'expliquer pourquoi seul le premier était éteint. – Matt

+0

Est-ce qu'il duplique? ou "déplacer" le contenu dans votre position popups? – scunliffe

Répondre

6

Un tableau d'au plus un objet Element sera renvoyé par $("#foo").get(). Voir le jQuery documentation pour plus d'informations, ou essayez-le vous-même.

$(function() { 
    alert($("#foo").length); 
}); 
+0

$ ("# foo") ne retourne pas un tableau. Il renvoie un objet contenant plusieurs fonctions. $ ("# foo"). get() est un tableau. –

+0

en fait vous pouvez indexer l'objet jquery par exemple $ ('.foo') [0]. Est-ce que cela en fait un tableau;) – redsquare

+0

Comme redsquare l'a dit, vous pouvez accéder aux éléments en utilisant des indices, et jQuery fournit également une propriété "length". En ce sens, vous pouvez le traiter comme un tableau. Cependant, les autres fonctions de tableau (comme pop, join, etc.) ne sont pas fournies. J'ai mis à jour ma réponse pour inclure la fonction get, comme l'a souligné Matthew. –

11

Les ID d'élément sont supposés être uniques. Avoir plusieurs DIV d'un même ID serait incorrect et imprévisible, et défie le but de l'ID. Si vous avez fait ceci:

$('.myDiv').fadeOut(); 

Ce seraient devenus tous les deux, vous leur donnez en supposant une classe de myDiv et des identifiants uniques (ou pas du tout).

7

« Note: Je sais Dupliquons des id est des normes »

ne pas le faire. Vous avez déjà compris deux problèmes. Cela viole les standards, et cela interfère avec le mécanisme de sélection de jQuery (et même du DOM habituel). Il y aura probablement plus de problèmes à l'avenir.

Tout à fait, vous sont en utilisant fancybox faux, auquel cas j'espère que quelqu'un de familier avec elle vous aide. Ou pire, si le script lui-même est défectueux, vous ne devriez pas l'utiliser. JQuery correspond exactement à un élément lors de l'interrogation d'un ID.

+0

alors je suis supposé écrire mon propre popup modal alors? Je sais que je ne suis pas le seul à utiliser fancybox. Cela n'a pas vraiment répondu à ma question ... – Matt

+0

Je ne vous ai jamais suggéré d'écrire votre propre dialogue modal. –

0

J'ai rencontré le même problème. Apparemment, lorsque vous créez du contenu sur la page à partir de laquelle vous souhaitez ouvrir un Fancybox, il crée un div miroir du contenu original. Dans mon cas, les contrôles ont été enveloppés dans un div qui fancybox crée son nom, « fancy_div »

j'ai pu sélectionner le contrôle et obtenir sa valeur en utilisant le format suivant pour le sélecteur:

$ (» #fancy_div [id = InputText] '). val();

vos contrôles peuvent exister ailleurs dans le Fancybox. la meilleure chose à faire est de regarder la source de vues, mais c'est difficile.

Pour accéder à la source de vue, utilisez la technique suivante: Placez cette balise sur votre formulaire: valeur Get Ouvrez votre formulaire, cliquez sur l'étiquette pour ouvrir la fenêtre d'alerte.
Assurez-vous que le curseur se trouve dans le contenu de la page (recherchez un contrôle et cliquez sur).
Cliquez avec le bouton droit de la souris et sélectionnez "view source".
Il existe un groupe de divs, alors recherchez la div qui contient votre contenu.

Espérons que cela aide.

1

Depuis $ (« # myDiv ») ne retournera le premier div avec cet ID, vous devrez trouver tous les éléments avec cet ID en utilisant cette astuce:

$('[id=myDiv]'); 

Alors, pour votre cas, d'appliquer les fadeOut à tous ces divs:

$('[id=myDiv]').fadeOut(); 

Et si vous voulez vous assurer que votre page ne pas cet ID deux fois alors vous pouvez supprimer ceux supplémentaires en faisant ceci:

$('[id=myDiv]:gt(0)').remove(); 
+0

Je pense que tout le monde est d'accord qu'avoir des identifiants en double est l'une des pires choses que l'on puisse faire (ça fait mal aux petits chatons et aux pandas tristes). Bien, cette astuce m'a aidé à corriger un petit bug dans une petite application Web utilitaire que j'ai écrite. En fait, j'ai des tables cachées qui servent de gabarits (je les copie pour en générer de nouvelles) et ces gabarits contiennent des Ids parce que j'utilise ces ids pour traduire du côté client (oui, je m'amuse avec JavaScript ici^^) – dSebastien

1

Vous pouvez également utiliser le chemin d'accès de find(). trouver retournera tous les éléments avec cet ID, et vous pouvez limiter la portée à un parent particulier si nécessaire essayer quelque chose comme $(document).find('#myDiv').fadeOut();

ou

$('.parentElement').find('#myDiv').fadeOut(); 
0

J'ai eu récemment un problème similaire. J'avais une seule page qui affichait un contenu différent grâce à un chargement Ajax. Un bouton permet au serveur de générer une image PDF.

Ma solution originale était d'utiliser un sélecteur de classe, qui fonctionnait bien, mais qui causait des frictions avec un autre révélateur. Il y avait déjà tellement de classes dans les liens que l'utilisation d'une classe comme identifiant rendait le code laid. J'ai donc utilisé un attribut de nom:

<a name="printButton".... 

$('a[name="printButton"]').on('click',function(){.... 

Travaillé juste dandy!