addClass à un certain identifiant après une réponse ajax avec json

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.