Как использовать jquery для манипулирования строкой запроса

У меня есть выпадающий список с идентификатором, сопоставленным со значениями. В событии onChange я хочу перенаправить на тот же URL-адрес, но с добавлением 'id = value' к строке запроса.

Как проверить, что этой опции 'id' еще нет в строке запроса (я не хочу нескольких значений), и заменить / добавить, если необходимо.

Как я могу проверить, если '?' уже находится в строке запроса и добавьте к URL, если его нет.

Есть ли простой способ сделать это с помощью jquery?

Он должен сделать нечто подобное под колпаком для вызовов $().ajax(url, {options}). Я надеялся, что смогу сделать $().redirect( url, { id : $(this).val() }) или еще что-нибудь.

Заранее спасибо.

Примечание. На этой странице может быть или не быть передано несколько различных параметров запроса (которые устанавливают значения по умолчанию для других параметров формы), поэтому замена всей строки запроса невозможна.

<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>
8
задан CoffeeMonster 12 January 2010 в 23:31
поделиться

5 ответов

Я оказался сопоставлением Regexp, чтобы переопределить параметры. jquery.param принимает хеш и сериалии его к запросу Но это не предоставляет обратную (расставаемую Query_String).

// put function into jQuery namespace
jQuery.redirect = function(url, params) {

    url = url || window.location.href || '';
    url =  url.match(/\?/) ? url : url + '?';

    for ( var key in params ) {
        var re = RegExp( ';?' + key + '=?[^&;]*', 'g' );
        url = url.replace( re, '');
        url += ';' + key + '=' + params[key]; 
    }  
    // cleanup url 
    url = url.replace(/[;&]$/, '');
    url = url.replace(/\?[;&]/, '?'); 
    url = url.replace(/[;&]{2}/g, ';');
    // $(location).attr('href', url);
    window.location.replace( url ); 
};

Тогда в HTML

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

благодаря всем, которые ответили.

10
ответ дан 5 December 2019 в 06:23
поделиться

Установка Window.location.Search будет обновлять строку запроса URL (и перезаписать значение, если это уже выходит)

$('#selector').change(function(){  
  window.location.search = "id=" + $(this).val();
}); 
6
ответ дан 5 December 2019 в 06:23
поделиться

Это работает как очарование:

jQuery.redirect = function( url ) {
   window.location.replace( url );  
};
$( "#selector" ).change( function() {
    var href = window.location.href.substring( 0, window.location.href.indexOf( '?' ) );
    $.redirect( href + '?id=' + $( this ).val() );
} );
2
ответ дан 5 December 2019 в 06:23
поделиться

Попробуйте использовать функцию split:

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

split возвращает список, состоящий из строки, разделенной строкой (например, '?'), с удаленной строкой.

1
ответ дан 5 December 2019 в 06:23
поделиться

Я подозреваю, что предполагаемое решение не работает с конкретными именами переменных. В частности, строка:

RegExp( ';?' + key + '=?[^&;]*', 'g' )

Если ключ представляет собой последовательность символов, присутствующую в другом месте в строке запроса, это вхождение также будет ошибочно заменено (попробуйте одну букву, например, 'a'). Это связано с тем, что регулярное выражение оставляет границы строки открытыми (ведущие ';' и завершающие '=' необязательны). Может быть, epxression лучше выглядит примерно так:

RegExp( '[;&]' + key + '=?[^&;]*', 'g' )

Хотя я еще не тестировал.

0
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: