2012-01-20 9 views
6

Ho un menu a discesa con doppio ruolo. L'utente può accedere direttamente alla pagina (http://mysite/events/Pages/default.aspx) e utilizzare il menu a discesa oppure è possibile effettuare prima una ricerca e il filtro ricerca ulteriormente selezionando il menu a discesa. Primo caso URL sarà come http://mysite/events/Pages/default.aspx?hos=Carmel e secondo URL Caso http://mysite/events/Pages/default.aspx?kwd=health&type=Events&hos=Carmel Questo è quello che sto facendo in questo momento, ma si comporta strano e fa sth come questo per url http://mysite.events/Pages/default.aspx?hos=Crown&hos=Carmelsostituire il valore querystring dell'URL sul cambio del menu a discesa

Quindi, se l'utente selezionato Carmelo dal menu a discesa della prima volta e ha deciso di voler cercare Indianapolis, allora dovrebbe sostituire "Carmel" con indianapolis o sostituire l'intera querstring "& hos = Carmel" con "& hos = Indianapolis" per il secondo caso e "? hos = Carmel "con"? Hos = Indianapolis "per il primo scenario

$(".hospitalDropDown").change(function(e){ 
      var querystring=window.location.search; 
      var currentURL=$(location).attr('href'); 
      if(location.href.indexOf('?') == -1) { 
       window.location.href= 'http://mysite/events/Pages/default.aspx'+'?hos='+$(this).val(); 
       } 
       else{ 

        window.location.href = ($(this).val() == "All Hospitals") ? 'http://mysitesite/events/Pages/default.aspx': location.href +'&hos='+ $(this).val(); } 
    )}; 

Ho trovato un codice elegante che utilizza regex per gestire la querystring ma non capisco come funziona la regex .. Come posso usare sth come di seguito nel mio caso?

function replaceQueryString(url,param,value) { 
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i"); 
    if (url.match(re)) 
     return url.replace(re,'$1' + param + "=" + value + '$2'); 
    else 
     return url + '&' + param + "=" + value; 
} 

risposta

7

Hai bisogno di fare qualcosa di simile:

function replaceQueryString(url,param,value) { 
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i"); 
    if (url.match(re)) 
     return url.replace(re,'$1' + param + "=" + value + '$2'); 
    else 
     return url + '&' + param + "=" + value; 
} 

$(".hospitalDropDown").change(function(e) { 
    window.location.href = replaceQueryString(window.location.href, 'hos', $(this).val()); 
)}; 

Il replaceQueryString snippet trovato era già confezionato in una piccola funzione di pulito per voi, quindi non c'è bisogno di sapere nulla di regex per usarlo. Tutto quello che devi fare è passare tale funzione al tuo url, al parametro che stai cercando di cambiare ("hos") e al nuovo valore.

Inoltre, $(location).attr('href') non è realmente valido e non lo si stava comunque utilizzando, quindi basta estrarlo e attaccare con window.location.href.

Infine, anche se in questo caso particolare non è stata necessaria alcuna conoscenza regex, è possibile trarre vantaggio dall'apprendimento di almeno una sintassi di base per l'espressione regolare. Dai uno sguardo a http://www.regular-expressions.info/ per alcune buone spiegazioni, quindi usa un regex tester come http://www.regextester.com/ per giocare con gli esempi e provare a scrivere qualcosa di tuo.

+0

Trascurato, in realtà hai risposto alla domanda - forse dovresti spostare la risposta davanti alla spiegazione – mplungjan

+0

@mplungjan Buon punto. Riorganizzato la mia risposta come hai suggerito –

+0

Inoltre ti suggerisco di cambiare window.location dato che window.location.href è la rappresentazione di stringa dell'URL corrente - quindi cambia the.href ma imposta l'oggetto posizione – mplungjan

0
$(".hospitalDropDown").change(function(e){ 
    var newhos=($(this).val() == "All Hospitals") ? '' : '$1hos=' + $(this).val(); 
    location.href=location.href.replace(/([\?\&])hos=\w+/,newhos); 
}); 
Problemi correlati