2010-01-31 2 views
0

как я написать функцию JavaScript, которая может получить текущий URL-адрес, например:Sprintf URL форматирования в JavaScript

http://www.blahblah.com/apps/category.php?pg=1&catId=3021

и в зависимости от выбора выбора пользователя, добавляет еще один параметр в URL, как:

http://localhost/buyamonline/apps/category.php?pg=1&catId=3021& предел = 5

но Heres улов:

Каждый раз, когда пользователь выбирает дифф выбор, я не хочу, чтобы такие вещи, как, добавить свои

http://localhost/buyamonline/apps/category.php?pg=1&catId=3021& предела = 5 & предел = 10 и так далее.

Я хочу, чтобы всегда заменить его, если нет предела, или заменить значение, если оно есть.

Я пытался выполнить это, используя sprintf, но не смог.

я делал так:

var w = document.mylimit.limiter.selectedIndex; 
var url_add = document.mylimit.limiter.options[w].value; 
var loc = window.location.href; 
window.location.href = sprintf(loc+"%s="+%s, "&limit", url_add); 
+0

В Javascript нет 'sprintf', если вы не напишете его. – kennytm

+0

У меня есть обертка sprintf, написанная некоторым чуваком http://www.webtoolkit.info/javascript-sprintf.html - так как вы понимаете мой вопрос, есть ли у вас какие-либо решения? thnx – Afamee

ответ

1

Изменено с регулярным выражением внедренным в JS.

  1. Вы можете использовать регулярное выражение, используя JavaScript заменить() Метод
  2. Вы можете использовать сборки всего URL-адреса каждый раз, а не просто добавление параметра
  3. Вы можете разобрать URL в его детали перед добавлением параметр

Что вы предпочитаете?

За # 1: Следующее должно сделать трюк. Обратите внимание, что есть проблемы с использованием регулярных выражений для синтаксического анализа URL-адресов. (Ref: stackoverflow.com/questions/1842681/...)

<script type="text/javascript"> 
    var pattern = "&limit(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)"; 
    var modifiers = ""; 
    var txt=new RegExp(pattern,modifiers); 
    var str="http://localhost/buyamonline/apps/category.php?pg=1&catId=3021&limit=5"; 
    document.write(str+"<br/>"); 
    var replacement = "&limit=10"; 
    document.write(str.replace(txt, replacement)); 
</script> 
+0

regex с заменой метода javascript, я думаю, что нужно делать. – Afamee

+0

спасибо всем, что я получил ответ. – Afamee

1

Ниже вы можете найти мой Sprintf реализации, которые вы можете использовать его в коде JS, чтобы добиться того, что вам нужно. Он работает почти как функция C++/Java/PHP с некоторыми ограничениями: спецификаторы формата написаны как %1 и не поддерживают спецификаторы заданного формата (например, %d, , %.2f и т. Д.).

String.prototype.sprintf = function() { 
    var matches,result = this, p = /%(\d)/g; 
    while (matches = p.exec(result)) { 
    result = result.replace(matches[0], arguments[parseInt(matches[1]) - 1]); 
    } 

    return result; 
}; 

Синтаксис:

format. sprintf (arg1, arg2, ...);

format Строка состоит из нуля или более спецификаторов формат, который следует за этим прототип:

  • % с последующим индексом аргумента, где первый аргумент имеет индекс 1.

arg1, arg2, ... являются переменными строками, которые заменят спецификаторы формата .

Пример: 'Быстрый %1 лиса прыгает через %2 dog'.sprintf (' brown '' lazy «);

Пример использования:

var str = 'The size of %1 (%2) exceeds the %3 (%4).'; 
console.log(str.sprintf('myfile.txt', '100MB', 'max. allowed size', '75MB')); 

Выход:

Размер myfile.txt (100 МБ) превышает макс. разрешенный размер (75 МБ).

Примечание: Если вам нужна надежная функция Sprintf проверьте sprintf на JavaScript.

Смежные вопросы