jquery ID avec des espaces

Est-ce que quelqu’un sait comment sélectionner un élément dans le DOM par ID avec jQuery, quand cet identifiant a un espace?

Par exemple, l’ID de mon article serait

Stuff

Comment pourrais-je sélectionner cela avec jQuery?

Si je fais juste

 $("#content Module").whatever() 

jQuery essaiera de trouver un élément avec à la fois l’ID du contenu et l’ID du module, ce qui n’est pas ce que je recherche.

Je devrais append que je travaille avec une ancienne base de code où ces deux identifiants de mots sont largement utilisés, donc passer et modifier tous les identifiants serait mauvais.

Utilisez un sélecteur d’atsortingbut.

 $("[id='content Module']").whatever(); 

Ou mieux, spécifiez le tag également:

 $("div[id='content Module']").whatever(); 

Notez que contrairement à $ (‘# id’), cela renverra plusieurs éléments si vous avez plusieurs éléments avec le même identifiant dans votre page.

N’utilisez pas d’espaces, la raison en est simple, les caractères d’espacement ne sont pas valides pour l’atsortingbut ID.

Les jetons d’identification doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis d’un nombre quelconque de lettres, de chiffres ([0-9]), de tirets (“-“), de traits de soulignement (“_”) (“:”) et les points (“.”).

Mais si vous ne vous souciez pas des normes, essayez $("[id='content Module']")

Sujet similaire> Quelles sont les valeurs valides pour l’atsortingbut id en HTML?

Edit: Comment ID diffère entre HTML 4.01 et HTML5

HTML5 supprime les ressortingctions supplémentaires sur l’atsortingbut id. Les seules exigences qui restnt – en plus d’être uniques dans le document – sont que la valeur doit contenir au moins un caractère (ne peut pas être vide) et qu’elle ne peut contenir aucun espace.

Lien: http://mathiasbynens.be/notes/html5-id-class

Juste au cas où quelqu’un serait curieux, j’ai trouvé que fuir l’espace fonctionnerait et fonctionnerait probablement mieux. Ceci est particulièrement utile lorsque vous ne contrôlez pas le DOM cible (c.-à-d. Un script utilisateur):

 $("#this\\ has\\ spaces"); 

Notez la double barre oblique inverse requirejse.

La méthode suggérée par Chris peut probablement être adaptée pour fonctionner avec les fonctions jQuery.

 var element = document.getElementById('content Module'); $(element) ... ; 

Une idée à essayer:

 $("#content" +   + "Module").whatever() $("#content" + %20 + "Module").whatever() 

Le point-virgule peut provoquer une erreur javascript. Je recommande également de changer l’identifiant pour ne pas avoir d’espace.

Essayez également document.getElementByID("content Module")

Cela a fonctionné pour moi.

 document.getElementById(escape('content Module')); 

Bien qu’il soit techniquement invalide d’avoir un espace dans une valeur d’atsortingbut d’ID en HTML , vous pouvez en fait le sélectionner en utilisant jQuery.

Voir http://mothereffingcssescapes.com/#content%20module :

  

jQuery utilise une syntaxe de type API Selectors, vous pouvez donc utiliser $('#content\\ module'); pour sélectionner l’élément avec id="content module" .

Pour cibler l’élément en CSS, vous pourriez lui échapper comme ceci:

  

cela peut fonctionner si vous voulez que l’élément ait la valeur exacte pour l’identifiant

 $("[id='content Module']").whatever(); 

mais si vous voulez vérifier si l’élément n’a qu’un seul (comme la classe) avec ou sans autres identifiants

 $("[id~='content']").whatever(); 

cela sélectionnera l’élément s’il a id="content" ou id="content Module" ou id="content Module other_ids"

J’ai trouvé dans mon cas que la fuite ne fonctionnait pas car elle remplace les espaces par% 20. J’ai plutôt remplacé, par exemple, le h1 de la page par le texte d’un élément de la liste. Si le menu contient:

 
  • Contact Us
  • function setTitle(menu) { $("h1").text( $("li#" + menu.replace(" ", "\\ ")).text() ); }

    J’avais des problèmes avec les identifiants d’élément contenant des virgules et / ou des espaces dans jQuery, donc je l’ai fait et ça a fonctionné comme un charme:

    var ele = $(document.getElementById('last, first'));

    Cela a des espaces et ne fonctionne pas:

    var ele = $('#last, first');

    Cela a une virgule et ne fonctionne pas:

    var ele = $('#last,first');