2016-10-07 8 views
2

Недавно я переключил свой сайт на использование чистых/SEO-дружественных URL-адресов, которые теперь вызвали у меня некоторые проблемы с функцией JavaScript, которую я использовал для захвата параметров строки запроса.Получение параметров строки запроса с чистых/SEO дружественных URL-адресов с помощью JavaScript

Раньше я использую эту функцию:

function getQueryVariable(variable) { 
var query = window.location.search.substring(1); 
var vars = query.split("&"); 
for (var i = 0; i < vars.length; i++) { 
    var pair = vars[i].split("="); 
    if (pair[0] == variable) { 
     return pair[1]; 
    } 
} 
return (false); 
} 

который работал отлично на такие вещи, как this, как вы могли бы просто назвать getQueryVariable("image") и вернуть «awesome.jpg».

Я играл с функцией indexOf();, чтобы попытаться захватить соответствующие параметры из текущего URL, например:

var url = window.location.pathname; 
var isPage = url.indexOf("page") + 1; 

В попытке получить индекс массива номер параметра «страницы», а затем плюс 1, чтобы перейти к значению этого (?page=name > /page/name/)

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

Любые указатели?

ответ

2

Как о чем-то вроде этого? Он разбивает путь и сохраняет смещение первого элемента массива, поскольку он определяет пары ключ/значение.

function getPathVariable(variable) { 
 
    var path = location.pathname; 
 

 
    // just for the demo, lets pretend the path is this... 
 
    path = '/images/awesome.jpg/page/about'; 
 
    // ^-- take this line out for your own version. 
 

 
    var parts = path.substr(1).split('/'), value; 
 

 
    while(parts.length) { 
 
    if (parts.shift() === variable) value = parts.shift(); 
 
    else parts.shift(); 
 
    } 
 

 
    return value; 
 
} 
 

 
console.log(getPathVariable('page'));

+0

Спасибо, это решить мою проблему прекрасно :) – MrLewk

0

Это может быть сделано формально с использованием библиотеки, такие как router.js, но я хотел бы пойти на простой манипуляции строки:

const parts = '/users/bob'.split('/') 
const name = parts[parts.length - 1] // 'bob'