Je veux appliquer la classe addClass
à un élément ayant un id
spécifique. Qui est rendu par ajax au format json
.
js
$(document).on('blur', '.autosave', function(e) { e.preventDefault(); $.ajax({ type: 'POST', url: 'inc/products_autosave.php', data: { id: $(this).prop('id'), val: $(this).val() }, dataType:'json', success: function(resp) { console.log(resp); //debug if(resp.sql=='ok'){ $('#'+resp.id).addClass('has-success animate bounce'); alert(resp.sql+' - '+id); }else{ alert(resp.sql+' - '+id); } } }); });
JSON
{sql: "ok", id: "prd_title_en|3"}
html
00003
Idéalement, je veux append la classe has-success
, animate
et bounce
à l’entrée #prd_title_en|3
. Mais il continue à dire Uncaught Error: Syntax error, unrecognized expression: #prd_title_en|3
Le problème est dû à la |
personnage. À partir de la documentation jQuery:
Pour utiliser n’importe lequel des méta-caractères (tels que! “# $% & ‘() * +,. / :; <=>? @ [] ^` {|} ~) En tant que partie littérale d’un nom, il doit être échappé avec deux barres obliques inverses http://api.jquery.com/category/selectors/
Pour append les caractères d’échappement, vous pouvez utiliser replace()
, comme ceci:
var resp = { sql: "ok", id: "prd_title_en|3" } if (resp.sql == 'ok') $('#' + resp.id.replace('|', '\\|')).addClass('has-success animate bounce'); console.log(resp.sql + ' - ' + resp.id);
.has-success { color: #0C0; }
00003
Vous ne pouvez pas utiliser le tuyau |
caractère dans un sélecteur jQuery, il a une signification particulière. Vous aurez besoin d’échapper au tuyau avec deux barres obliques inverses, comme ceci:
$('#prd_title_en\\|3');
Dans votre cas, vu que cela fait partie de la réponse, vous devrez probablement faire un ssortingng.replace sur le tuyau pour y échapper:
var escapedId = resp.id.replace('|', '\\|'); $('#'+escapedId);
Voir http://api.jquery.com/category/selectors/ pour plus d’informations sur les sélecteurs jQuery.