2014-02-11 3 views
0

Я хочу получить данные из строки запроса URL и отобразить ее в теле документа HTML. Я не могу заставить скрипт заменить знаки + пустым пространством.Заменить значение массива

Пример URL: www.mywebsite.com/?item=Sandwich & хлеб = Белый + Хлеб

В HTML тела, текстовое поле для пункта будет показывать «сэндвич», но текстовое поле для хлеба покажет «Белый + хлеб.» Как я могу заменить + на пробел?

Вот функция Im помощи, чтобы получить значение из URL

function querystring(key) { 
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi'); 
    var r=[], m; 
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]); 
    return r; 
} 

    $("span.item").text(querystring('item')); 
    $("span.bread").text(querystring('bread')); 

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

.replace(/\+/g, ' ') 
+2

Это потому, что массивы не имеют метод замены. Где вы пытались использовать этот вызов '.replace()'? Если вы поместили его внутри цикла while (например, 'r.push (m [1] .replace (...)), это может сработать. Кроме того, почему вы не используете один из многих пользовательских интерфейсов, созданные функции, которые уже выполняют этот синтаксический анализ? Некоторые из них оптимизируют извлечение значения ключа из строки запроса, а также гораздо лучшую поддержку таких вещей. Например - http://stackoverflow.com/questions/901115/how -can-i-get-query-string-values-in-javascript (мне нравится второй ответ) – Ian

+0

Возможно, я не понял вопрос правильно, но почему бы не использовать 'encodeURI()/decodeURI()'? – ochi

+0

Спасибо, Аллан Я попытался выполнить поиск, но, я думаю, я не искал правильные теги. Это решение намного эффективнее и отлично подходит для меня. – Narong

ответ

3

Ваша функция возвращает массив, попробуйте изменить его следующим образом:

function querystring(key) { 
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi'); 
    var r=[], m; 
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]); 
    return r[0]; 
} 

, то вы можете использовать заменить

.replace(/\+/g, ' ') 
+0

Это действительное исправление для моей проблемы, но, пожалуйста, обратитесь к комментарию Аллан Киммер Йенсен под моим вопрос для лучшего решения. Спасибо! – Narong

0

Я бы заменить функцию с чем-то вроде этого, избавиться от регулярного выражения для удобочитаемости. Он обрабатывает неопределенные ключи/значения, плюс вы можете легко реорганизовать первую часть его в функцию parseQueryString, возвращая словарь для текущего document.location.search.

function querystring(key) { 
    var hash = {}; 

    var pairs = document.location.search.substr(1).split('&'); 
    for(var i = 0; i < pairs.length; i++) { 
     var tuple = pairs[i].split('='); 
     hash[tuple[0]] = tuple[1]; 
    } 

    var val = hash[key]; 
    return (val) ? val.replace(/\+/g, ' ') : undefined; 
} 

Использование:

querystring('bread'); 
> White Bread 
Смежные вопросы