Besoin d'échapper à un caractère spécial dans un sélecteur jQuery chaîne
Selon les sélecteurs de docs, vous devez vous échapper [
avec double barre oblique, etc \\[
.
J'ai un sélecteur qui est créé comme (à supposer val
attribut est something[4][2]
dans cet exemple).
var val = $(this).attr('val');
$select.find('option[value=' + val + ']').show();
Puis-je écrire une regex pour échapper à l'crochets pour moi?
Vous devez vous connecter pour publier un commentaire.
Si vous voulez quelque chose qui fonctionne avec n'importe quelle sorte de valeur, essayez ceci:
Cela fonctionne en échappant à tous les CSS méta-caractères répertoriés sur le Les sélecteurs de page de la documentation de jQuery avec deux barres obliques inverses.
Garder à l'esprit que, dans votre situation, il n'est pas nécessaire de faire quelque chose de difficile comme ça. Vous pouvez utiliser le filtre fonction pour sélectionner l'option tous les éléments avec une valeur donnée, sans avoir à s'échapper de la valeur, comme décrit dans Mathias Bynens de réponse.
@
sur les sélecteurs de la page quand j'ai écrit ça, mais je ne trouve pas exactement quand ils l'ont ajouté dans le dépôt de leur documentation. En tout cas, je suis sur le point de le fixer.> cs < "#XMTM2NDQwNTI5Mg\\=\\=" = $7 > $(cs) < Error: Syntax error, unrecognized expression: #XMTM2NDQwNTI5Mg\\=\\= > $("#XMTM2NDQwNTI5Mg\\=\\=") < m [<div id="XMTM2NDQwNTI5Mg==">] (1) = $10
puis-je changer la variable d'évasion à l'aide de:replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^
{|}~]/g, "\\$&")", à l'aide de la variable en tant que sélecteur de travaux.CSS caractère séquences d'échappement (comme utilisé dans les sélecteurs) sont difficile. Ils sont si délicats, j'ai même fait une application web qui peut vous dire comment échapper à n'importe quel caractère dans le CSS.
C'est beaucoup plus simple et plus efficace, il suffit de sélectionner tous les
option
éléments et puisfilter
sur la base de leurvalue
valeur d'attribut:De cette façon, aucun échappement est nécessaire à tous.
Vérifier cela...
bien sûr, ce que les poignées, les crochets, pas de tous les autres caractères spéciaux. Cependant, dans mon expérience, les crochets sont les seuls que j'utilise (en raison de PHP à la pratique de la manipulation de saisie du nom des attributs tels que:
something[]
)En retard pour répondre mais,
jQuery 3
et en ajoutant manquant
""
dans'option[value="'+ val +'"]'
JS:
CSS:
HTML:
jQuery 3 et
jQuery.escapeSelector()
sans emballage citations - donc, à l'aide de votre sélecteur d'origine
'option[value='+ val +']'
JS:
CSS:
HTML:
jQuery FAQ a une solution sympa pour ce qui échappe à tout caractère qui nécessite jQuery.
J'aime ce nullsafe version de ce qu'ils suggèrent:
Mettre des guillemets autour de la valeur de l'attribut dans le sélecteur, puis vous n'avez qu'à barres obliques inverses, et les citations de la valeur:
Si vous savez que la valeur n'a pas les barres obliques inverses ou des guillemets (comme dans votre exemple), alors vous n'avez pas besoin d'échapper à quoi que ce soit dans la valeur, vous avez seulement besoin de les guillemets dans le sélecteur.
Si le sélecteur se termine avec le char spécial, vous ne pouvez pas échapper à l'aide de doubles barres obliques inverses. Le travail arround est d'utiliser les regex : Par exemple, si le sélecteur d'id est "bonus+", alors vous pouvez utiliser:
Il fait plus de sens quand vous avez la dynamique des sélecteurs.