2012-01-20 17 views
6

Tengo un menú desplegable que tiene un doble rol. El usuario puede acceder a la página (http://mysite/events/Pages/default.aspx) directamente y utilizar el menú desplegable o primero puede hacer una búsqueda y el filtro de la búsqueda resultó más mediante la selección del menú desplegable. Primera URL caso será como http://mysite/events/Pages/default.aspx?hos=Carmel y URL segundo caso http://mysite/events/Pages/default.aspx?kwd=health&type=Events&hos=Carmel Esto es lo que estoy haciendo en este momento, pero se comporta extraño y hace algo como esto para url http://mysite.events/Pages/default.aspx?hos=Crown&hos=Carmelreemplazar el valor de la cadena de URL en el cambio del menú desplegable

Así que si seleccionado por el usuario Carmel en el menú desplegable de la primera vez y decidió que quería buscar Indianápolis, entonces debería reemplazar 'Carmel' con indianapolis o reemplazar toda la cadena de caracteres "& hos = Carmel" con "& hos = Indianapolis" para el segundo caso y "? hos = Carmel "con"? Hos = Indianápolis "para el primer escenario

$(".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(); } 
    )}; 

Encontré un código ingenioso que usa expresiones regulares para manejar la cadena de consulta pero no entiendo cómo funciona la expresión regular ... ¿Cómo puedo usar algo como abajo en mi 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; 
} 

Respuesta

7

que tiene que hacer algo como esto:

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()); 
)}; 

El replaceQueryString de fragmento de código que has encontrado ya fue empaquetado en una pequeña función ordenada para usted, por lo que no necesita saber nada acerca de expresiones regulares para usarlo Todo lo que necesita hacer es pasar esa función a su url, el parámetro que está tratando de cambiar ("hos") y el nuevo valor.

Además, $(location).attr('href') no es realmente válido, y usted no lo estaba usando de todos modos, simplemente sáquelo y quédese con window.location.href.

Finalmente, aunque no necesitó ningún conocimiento de expresiones regulares en este caso particular, definitivamente podría beneficiarse de aprender al menos algunas sintaxis de expresiones regulares básicas. Eche un vistazo a http://www.regular-expressions.info/ para algunas buenas explicaciones, y luego use un probador de expresiones regulares como http://www.regextester.com/ para jugar con las muestras e intentar escribir algunas propias.

+0

se pasa por alto que en realidad respondieron a la pregunta - quizás usted debe mover su respuesta en la delantera de la explicación – mplungjan

+0

@mplungjan Buen punto. Reorganicé mi respuesta como sugirió –

+0

También sugiero cambiar window.location ya que window.location.href es la representación de la cadena de la url actual - así que cambie the.href pero establezca el objeto de ubicación – mplungjan

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