/** * Работа с URL */ // все параметры URL window.getAllUrlParams = function (url) { var queryString = url ? url.split('?')[1] : window.location.search.slice(1); var obj = {}; if (queryString) { queryString = queryString.split('#')[0]; var arr = queryString.split('&'); for (var i = 0; i < arr.length; i++) { if (!arr[i]) continue; obj[i] = {}; var a = arr[i].split('='); if (!a[0] || !a[1]) { continue; } var paramNum = undefined; var paramName = a[0].replace(/\[\d*\]/, function (v) { paramNum = v.slice(1, -1); return ''; }); var paramValue = typeof (a[1]) === 'undefined' ? true : a[1]; if (obj[i][paramName]) { if (typeof obj[i][paramName] === 'string') { obj[i][paramName] = [obj[i][paramName]]; } if (typeof paramNum === 'undefined') { obj[i][paramName].push(paramValue); } else { obj[i][paramName][paramNum] = paramValue; } } else { obj[i][paramName] = paramValue; } } } return obj; }; // установка параметра в URL window.setUrlParam = function (paramKey, paramValue) { var href = window.location.href; var origin = window.location.origin; var pathname = window.location.pathname; var search = window.location.search; var hash = window.location.hash; var flag = false; var params = window.getAllUrlParams(search); var newSearch = []; Object.keys(params).forEach(function (idx) { var key = Object.keys(params[idx])[0]; if (!key || !params[idx][key]) { return; } if (key == paramKey) { if (paramValue) { newSearch.push(key + '=' + paramValue); } flag = true; } else { if (params[idx][key]) { newSearch.push(key + '=' + params[idx][key]); } } }); if (!flag && paramValue) { newSearch.push(paramKey + '=' + paramValue); } newSearch = origin + pathname + '?' + newSearch.join('&') + hash; // если закомментировать, то подстановка параметров в url отключится window.history.replaceState({}, '', newSearch); // window.history.pushState({}, '', newSearch); }; // поиск параметра в URL window.getUrlParam = function (searchParam, urlParams) { urlParams = urlParams || false; if (typeof urlParams === "object") { for (var i in urlParams) { if (!urlParams.hasOwnProperty(i)) continue; var params = urlParams[i]; for (var n in params) { if (!params.hasOwnProperty(n)) continue; if (n == searchParam) { return params[searchParam]; } } } } return false; }; // объединение параметров полученных в getAllUrlParams(), итог строка параметров без знака ? в начале window.joinUrlParams = function (urlParams) { if (typeof urlParams !== 'object' || Object.keys(urlParams).length === 0) { return ''; } var params = []; Object.keys(urlParams).forEach(function (idx) { var item = urlParams[idx] || {}; var keys = Object.keys(item); var key = keys.length ? keys[0] : null; var value = key ? item[key] : false; if (key && value) { params.push(key + '=' + value); } }); var output = ''; if (params.length > 0) { output = params.join('&'); } return output; }; // удаление параметра полученного в getAllUrlParams() window.deleteUrlParam = function (urlParams, deleteParam) { if (typeof urlParams !== 'object' || Object.keys(urlParams).length === 0) { return urlParams; } Object.keys(urlParams).forEach(function (idx) { var item = urlParams[idx] || {}; var keys = Object.keys(item); var key = keys.length ? keys[0] : null; if (key && key == deleteParam) { delete urlParams[idx]; } }); return urlParams; };