8
votes

Comment utiliser jQuery pour manipuler le querystring

J'ai une liste déroulante sélectionnée avec ID mappée sur les valeurs. Sur l'événement OnChange, je veux rediriger vers la même URL, mais avec "id = valeur" annexée au QueryString.

Comment puis-je vérifier que cette option "ID" n'est pas déjà dans le querystring (je ne veux pas Valeurs multiples) et remplacer / ajouter si nécessaire. p>

Comment puis-je vérifier si "?" est déjà dans le querystring et ajoute à l'URL si ce n'est pas. P>

Y a-t-il un moyen facile avec JQuery de faire cela? P>

Il doit faire quelque chose de similaire sous le capot pour $ (). Ajax (URL, {Options}) CODE> Appels. J'espérais que je pouvais juste faire $ (). Redirection (URL, {id: $ (ceci) .val ()}) code> ou somesuch. P>

Merci d'avance.

Remarque: cette page peut ne pas avoir que quelques options de requête différentes transmises (qui définissent les valeurs par défaut sur d'autres options de formulaire), le remplacement de l'ensemble de la requête globale n'est pas une option. P>

<html>
<head><script type="text/javascript" src="/jquery-1.3.2.min.js"></script></head>
<body>
  <script>
    $(function(){                                                                                                                                         
        $('#selector').change(function(){                                                                                                                 
            // problem if 'id' option already exists
            var url = location.href + '?;id=' + $(this).val();                                                                                            
            location.assign( url );
        });                                                                                                                                               
    });                                                                                                                                                   
  </script>

  <a href="#" onclick="location.assign( location.pathname )">reset</a>                                                                                      
  <form>                                                                                                                                                    
    <select id='selector' name='id'>                                                                                                                      
        <option value='1'>one</option>                                                                                                                    
        <option value='2'>two</option>                                                                                                                    
        <option value='3'>three</option>                                                                                                                  
    </select>                                                                                                                                             
  </form>
</body>
</html>


1 commentaires

6 Réponses :


1
votes

Essayez d'utiliser la fonction Split:

var url = location.href.split('?')[0] + '?;id=' + $(this).val();


0 commentaires

2
votes

Cela fonctionne comme un charme: xxx


0 commentaires

7
votes

paramètre fenêtre.location.search code> mettra à jour la chaîne de requête de l'URL (et écrasera une valeur s'il est déjà sorti)

$('#selector').change(function(){  
  window.location.search = "id=" + $(this).val();
}); 


2 commentaires

Quel navigateur? Quel est votre HTML et JS?


Désolé, je me suis trompé .Search pour un paramètre "Recherche" QueryString. Vraiment recherche signifie l'ensemble de la requête dans l'objet de localisation de DOM.



10
votes

J'ai fini par aller avec une correspondance Regexp pour remplacer les options. jquery.param prend un hash et la sérialise à une query_string mais cela ne fournit pas l'inverse (briser une query_string).

$('#selector').change(function(){ 
   $.redirect( location.href, { id : $(this).val() })
})


0 commentaires

0
votes

Je soupçonne que la solution alléguée ne fonctionne pas avec des noms de variables spécifiques. Surtout la ligne: xxx

Si la clé est une séquence de caractères présentée ailleurs dans le querystring, cette occurrence sera remplacée par erreur (essayez une lettre, par exemple 'a'). En effet, la regex quitte les limites de la chaîne ouvertes (leaders ';' et la trailing '=' sont à la fois facultatives). Peut-être que l'épendresse est mieux comme: xxx

si je ne l'ai pas encore testé.


1 commentaires

Joli bogue trouver! Vient de vérifier mon code et je passe dans client_id = 12; projet_id = 45; etc. Mais je vois à quel point il serait facile de casser avec juste id = Je pense que je vais aller avec quelque chose comme Regexp ('[; &]? \ B' .. .) va tester quand je vais travailler. Merci.



7
votes

Basé sur la réponse de CoffEemonster:

Il y a un problème lorsque l'emplacement.href contient une partie de hachage:

www.example.com # hachage devient www.example.com # hash? id = quel que soit ce qui donne dans ? id = quelconque ne pas être interprété Par le serveur.

corrigé en supprimant la partie de hachage de l'URL: url.split ("#") [0];
xxx

maintenant www.example.com # hachage devient www.example.com?id=whatever


1 commentaires

Maintenant, pour des points bonus, réattachez le hachage à la fin de l'URL. :-)