/ / jQuery ne récupère pas un élément basé sur le sélecteur d'ID - jquery, html, html-table, jquery-selectors

jQuery ne récupère pas un élément basé sur ID Selector - jquery, html, html-table, jquery-selectors

J'utilise jQuery 1.7.1 et aucune autre bibliothèque / infrastructure JS. Je peux très bien sélectionner la plupart des éléments, à l’exception d’une table qui me pose problème. Cela se produit à la fois dans Firefox et Chrome.

Voici une image qui décrit tout cela:

Console JavaScript Chrome

Les étapes de cette image, dans l'ordre:

  1. Je sélectionne tous les tableaux de la page
  2. Je sélectionne une table différente de celle que je veux
  3. Je règle cette table sur "display: none" (juste pour illustrer que jQuery ne se soucie pas de "display: none")
  4. Je sélectionne à nouveau cette table, maintenant qu’elle est cachée. Tout va bien.
  5. Ensuite, j'essaie de sélectionner la table que je veux réellement. Je ne reçois rien en retour.
  6. J'utilise le tableau initial de tables pour assigner la table que je veux à une variable.
  7. jQuery a bien renvoyé cette table, qui se trouve maintenant dans la variable "theTableIWant".
  8. Le "id" de la table est exactement le même "id" que j'avais sélectionné à l'étape 5, cela n'a pas fonctionné.

Pourquoi je ne voudrais pas juste me remettre la table? Pourquoi cela pourrait-il arriver?

Réponses:

3 pour la réponse № 1

Ça ne marche pas parce que # est un caractère spécial dans les sélecteurs jQuery pour les identifiants afin que vous obteniez cette erreur: Syntax error, unrecognized expression: #office_set-###

Si vous devez vraiment utiliser ### dans l’identifiant (je ne le recommanderais pas pour la raison que Matt a postée), vous pouvez l’échapper de la manière suivante:

​$("#office_set-\#\#\#")

Exemple - http://jsfiddle.net/infernalbadger/fpcME/

Vous devez double échapper car vous voulez réellement passer le au moteur de sélection jQuery.


2 pour la réponse № 2

"#" n'est pas officiellement valide dans DOM ID "s: http://www.w3.org/TR/REC-xml/#NT-Name et par conséquent, vous ne recevrez pas de support constant.


2 pour la réponse № 3

Vous ne devriez pas utiliser ces méta-caractères: !"#$%&"()*+,./:;<=>?@[]^{|}~ dans vos identifiants, classes de variables, attributs et valeurs (également le backtick: `, mais je ne peux pas le mettre dans un bloc de code ^^).

si vous devez utiliser ces caractères, vous pouvez les échapper dans votre sélecteur avec deux barres obliques inverses

$("#office_set-\#\#\#")

d'ailleurs votre question est vraiment pertinente lorsque cesles caractères sont utilisés comme code javscript, par exemple dans un attribut onclick. Vous pouvez trouver des éléments contenant un code spécifique uniquement lorsque vous échappez correctement aux méta-caractères (dont il y en aura beaucoup).

Source et plus d'informations ici: http://api.jquery.com/category/selectors/


0 pour la réponse № 4

1) Assurez-vous que le sélecteur de table de l’étape 5 est correct. Peut-être y at-il plus d’un élément avec le même identifiant.

2) Lorsque vous affectez un élément JQuery à une variable, vous ne pouvez pas appeler les attributs bruts du DOM comme cela. Essayez:

theTableIWant.attr("id");

Ou:

var theTable = $(theTableIWant).get(0);
theTable.id;

0 pour la réponse № 5

Vous devez citer les caractères # dans votre ID, car ce caractère est un caractère spécial pour jQuery.

$("#office_set-\#\#\#");

Il s'agit de doubles barres obliques inverses afin que JavaScript les convertisse en simples barres obliques inverses que jQuery voit ensuite.