Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2015, 09:49
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Где взять годный объект параметров урла
Если с частями pathname все довольно просто, и я даже не заморачивался написанием урло-генератора для них, то с параметрами, которые search string всегда был геморрой. На php от него удалось избавиться, а для js хотелось бы подыскать готовый, потому что я вообще не знаю как на js колдовать с геттерами и сеттерами, без которых геморроя будет не меньше.

Суть такова. На примере как работает пхпшный парсер-генератор:

echo $get->url_home()->page(1)->order('da')->onpage(32)->some('param');


дает типа

http://www.example.com?page=1&order=da&onpage=32&some=param


после того как дал берет (на любой другой странице) и можно поменять или выкинуть параметры

echo $get->url_home()->page(null)->order('dd')->onpage(null)->some('no');


дает

http://www.example.com?order=dd&some=no


Все параметры - условные, просто для примера. Я юзаю коротки ключи, они хранятся в настройках объекта, чтоб было понятно пишу полностью.

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

Допустим было

http://www.example.com?page=1&order=da&onpage=32&some=param


выводим где-то адрес в линк

echo $get->url_home()->some('no')->bar('baz');


получаем

http://www.example.com?page=1&order=da&onpage=32&some=no&bar=baz


Таким образом объект поддерживает любое количество параметров (включая массивы) и в любой момент можно поменять любой параметр, убить или добавить новый.

Затем по проверкам

if($page=$get->page){
/* Если в page что-то есть, оно будет в page, если нет, там будет null */
}


Ну и просто можно профтыкать

$get->page=$page


чтоб поменять номер страницы перед выводом.

Объект сам растеризуется по умолчанию для обычных линков.

Есть что-то похожее на js из готового и не сильно жирного?
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2015, 09:54
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Например мне надо стереть фильтры которые в параметре f=, но не стирать выбранную сортировку o= , но стереть p= (страницу) если есть. Как подумаю как это на регах делать в js, так сразу становится очень печально.

Да, еще там фича, что генерить кучу ссылок где меняется один-два параметра вообще лафа

$get->url_home(); // инициализировали
foreach($arr as $p)
  echo '<a href="'.$get->page(p).'">'.$p.'</a>';

Последний раз редактировалось kostyanet, 14.05.2015 в 10:02.
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2015, 19:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Еще раз напоминаю про заявку. Или как на js оно вообще делается или нет?
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2015, 18:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ладно, припомню всем кто не ответил...

Написал сам приблизительный пердимоноколь:

var Get=(function(){
	var qd = {}, qs={},
	ins=function(k,v){
		qd[k]=v;
	};
	location.search.substr(1).split("&").forEach(
		function(item){
			ins(item.split('=')[0],decodeURIComponent(item.split('=')[1]));
		});
	return {
		set:function(k,v){
			qs[k]=v;
			return this;
		},
		get:function(k){
			return (k in qd)?qd[k]:null;
		},
		toString:function(){
			var k,res=[];
			for(k in qs)
				qd[k]=qs[k];
			for(k in qd)
				if(qd[k]!==null)
					res.push(k+'='+encodeURIComponent(qd[k]));
			return res.join('&');
		},
		ass:function(){
			location.search=this.toString();
		},
		qd:qd
	};
})();


Вопрос, какого члена-корреспондента toString не плющит объект? То есть как оказалось тут и не нужен такой метод как таковой, рендерить ссылки я не собираюсь, но почему-то не плющит, проверял в срачпаде ФФ.

Еще вопрос, а как теперь сделать чтобы set скрылся в приват, а ключи можно было профтыкать по имени, типа вот так

Get.fls=null
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2015, 18:45
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Еще один, forEach фурычит во всех актуальных браузерах? Я нашел кусочек который над обхектом на СО, от него ничего не осталось почти кроме этого форича.
Ответить с цитированием
  #6 (permalink)  
Старый 15.05.2015, 22:19
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Абсолютно е67ытая система, мля, все никак не могу привыкнуть.

location.search.substr(1).split("&").forEach(

казалось бы нет ни одного сепаратора - пройдет мимо, сразу выпадет по фолс на конец конструкции. Х нанэ - залезет со своей ебучей пустой строкой и нахерачит там ундефайнедов...

ну кто такую логику вообще придумал, суки...
Ответить с цитированием
  #7 (permalink)  
Старый 15.05.2015, 22:27
Новичок на форуме
Посмотреть профиль Найти все сообщения от fuckJS
 
Регистрация: 15.05.2015
Сообщений: 8

че то у тебя много умных слов, а задача, похоже, детская. Ты что, не можешь урл что-ли склеить?
Ответить с цитированием
  #8 (permalink)  
Старый 15.05.2015, 22:28
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Ну склейте если такой умный. Задача с примерами сформулирована выше.
Ответить с цитированием
  #9 (permalink)  
Старый 15.05.2015, 22:37
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Такчта в газенваген форич, синергизм тупизны, блин. Вот так надо

for(var s=location.search.substr(1).split('&'),i=0;item=s[i];i++)
		qd[item.split('=')[0]]=decodeURIComponent(item.split('=')[1]);
Ответить с цитированием
  #10 (permalink)  
Старый 15.05.2015, 23:44
Новичок на форуме
Посмотреть профиль Найти все сообщения от fuckJS
 
Регистрация: 15.05.2015
Сообщений: 8

Сообщение от kostyanet
Задача с примерами сформулирована выше.
Мне твою ахинею читать неохота, но судя по названию темы, типа того
Url={
 clone: function(){
  var o=Object.create(this)
  o.params={}
  return o
 },
 setPath: function(path){this.path=path},
 setParams: function(src){
  for(var i in src) {
   if(!src.hasOwnProperty(i)) return this;  this.params[i]=encodeURIComponent(src[i])
   }
   return this
 },
 removeParam: function(param){with(this){
  for(var i in params){if(i === param) {delete params[i]}}}
 },
 get: function(){
   with(this) {
     var paramsString=""
     for(var i in params){ if(!params.hasOwnProperty(i)) return; paramsString+=i+"="+params[i]+"&"}
     return path+paramsString.replace(/\&$/, "")
   }
 }
}
 
with(url=Url.clone()){
 setPath("http://mysite.com?")
 setParams({foo: "bla-bla", bar: "русский??текст"})
}
 
 
with(url) with(console){
 log(get())
 setParams({baz: "mooo"})
 log(get())
 removeParam("foo")
 log(get())
 setPath("http://another-site.com?")
 log(get())
}



//>>>> [url]http://mysite.com?foo=bla-bla&bar=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3F%3F%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD[/url]
//>>>> [url]http://mysite.com?foo=bla-bla&bar=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3F%3F%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&baz=mooo[/url]
//>>>> [url]http://mysite.com?bar=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3F%3F%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&baz=mooo[/url]
//>>>> [url]http://another-site.com?bar=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%3F%3F%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&baz=mooo[/url]

Последний раз редактировалось fuckJS, 16.05.2015 в 00:31.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как взять html() сам объект на который вешаем qwermjk jQuery 17 10.02.2013 16:40
Где взять рабочую таблицу с обращением через Интернет? tsvigo ExtJS 2 19.12.2011 13:23
Нужен календарь на javascript. Где взять? javascript_pupil Общие вопросы Javascript 8 07.10.2011 18:34
Самый сложный вопрос - где взять "австралию" Solovei95 Общие вопросы Javascript 1 24.07.2011 06:08
Исходный мануал по JS, где взять? mycoding Общие вопросы Javascript 10 23.01.2010 12:49