Помогите собрать массив в виде serialize

Avenus

Under Glory Yield
Помогите собрать массив в виде serialize

Привет всем!
Помогите, пожалуйста, собрать массив id и значений с разделяющим символом,
к примеру "|" из такой конструкции:
PHP:
<ul id='tree'>
 <li>
  <img src='1.jpg'>
  <div id='1'>info 1</div>
 </li>
 <li>
  <img src='2.jpg'>
  <div id='2'>info 2</div>
 </li>
 <!--  ... и так далее -->
</ul>
Пытаюсь сделать через событие onClick на кнопку:
PHP:
<input type='button' onClick="getTree('tree');">
В javascript-функции пишу:
PHP:
function getTree(id){
list=document.getElementById(id);
var items=list.getElementsByTagName('li');
for(var i=0;i<items.length;i++){
// здесь надо разобрать родителя LI в массив id и TEXT из дочернего DIVа
// да и еще потом в array собрать
 var id=items[i].childNodes[3].getAttribute('id');
 var text=items[i].childNodes[3].innerHTML;
// так я получу данные
// а как все собрать в массив?
}
А на выходе хотелось бы получить такой массив:
1=info 1|2=info 2
Обращаюсь к знатокам javascript: подскажите как реализовать, пожалуйста.
 

AmdY

Пью пиво
Команда форума
str += items.getElementsByTagName('div')[0].id + "=" + items.getElementsByTagName('div')[0].innerHTML;
if (i < items.length) str += "|";
 

Avenus

Under Glory Yield
AmdY спасибо, только я вставил
PHP:
if (i && i < items.length) str += "|";
до str+=...
Иначе еще одна прямая черта в конце добавляется, что мне не нужно :)
dimagolov мне этот массив потом на сервере для своих нужд надо обработать. Другого подходящего варианта для массива я не придумал.

-~{}~ 19.09.08 01:10:

dimagolov, к тому же массив передается потом через GET запрос в XMLHttpRequest. Может есть другие варианты получше завернуть массив для такой передачи на сервер?
 

dimagolov

Новичок
JSON. потому что появится у тебя в переменных символ '|' и у тебя возникнут проблемы. а там уже есть реализация всего этого уже.
 

Ironfoundersson

Новичок
вариант для jQuery для "сериалайза формы", обственно как пример. на выходе обект для отправки на сервер.
опять же как пример.



PHP:
jQuery.fn.extend({
   WP_MultilingialSerialize: function() {
        var obj = new Object();
		
	jQuery(this).find("input[@type='text'],input[@type='password'],input[@type='hidden'],textarea").each(function(){
		if (jQuery(this).attr('disabled') == false || jQuery(this).attr('disabled') == undefined){
		var k = this.name || this.id || this.parentNode.name || this.parentNode.id;
		obj[k] = jQuery(this).val();				
	}});
	
	jQuery(this).find("input[@type='checkbox']").filter(":checked").each(function(){
		if (jQuery(this).attr('disabled') == false  || jQuery(this).attr('disabled') == undefined){
		var k = this.name || this.id || this.parentNode.name || this.parentNode.id;
		obj[k] = jQuery(this).val();				
	}});
	
	jQuery(this).find("input[@type='radio']").filter(":checked").each(function(){
		if (jQuery(this).attr('disabled') == false  || jQuery(this).attr('disabled') == undefined){
		var k = this.name || this.id || this.parentNode.name || this.parentNode.id;
		obj[k] = jQuery(this).val();				
	}});	
	  
	jQuery(this).find("select").each(function(){
		if (jQuery(this).attr('disabled') == false  || jQuery(this).attr('disabled') == undefined){
		var k = this.name || this.id || this.parentNode.name || this.parentNode.id;
		obj[k] = jQuery(this).val();				
	}});  
	  
	return obj;
   }
});
 

Avenus

Under Glory Yield
dimagolov, согласен, что из-за символа в переменной будут проблемы. Но я не использую библиотеку JSON. Несколько скриптов и все, больше не нужно... поэтому пока нецелесообразно подключать дополнительную библиотеку.
А насчет символа, я ведь могу его вырезать еще при вводе... чтобы его там не оказалось :)
 

AmdY

Пью пиво
Команда форума
Avenus
берёшь Zend_JSON, он либо использует библиотеку. либо сам парсит и никаких проблем, подключаешь в нужном месте и радуешься.
а вот когда ты решишь изменить или расширить функционал, то не раз вспомнишь совет с благодарностью.
Ironfoundersson
неужели в jquery всё так плохо и нет готовой функции для сериализации формы?
 

Avenus

Under Glory Yield
AmdY, может быть :) мне для начала надо научиться такие задачи решать, а потом уже переходить на более высокий уровень.
 

Ironfoundersson

Новичок
Автор оригинала: AmdY
Ironfoundersson
неужели в jquery всё так плохо и нет готовой функции для сериализации формы?
http://docs.jquery.com/Ajax/serialize
з.ы.
просто порт старого моего кода когда про Джиквери еще не слышали а аякс уже использовали. но спасибо что беспокитесь!
 

AmdY

Пью пиво
Команда форума
ну, слава богу.
меня смутило, что в коде вместо непосредственной работы с формой используются селекторы. я их как-то недолюбливаю.
 

HraKK

Мудак
Команда форума
Zend_JSON
Я не пойму что все помешались на ZF... Как будто это стандарт какой-то. Или мне одному мещещиться что он нунеразу не тянет на стандарт?

*hint: http://php.net/json_decode
 

AmdY

Пью пиво
Команда форума
я как раз писал выше об этой полезной функции, но на случай если расширение не установлено, желательно иметь запасной вариант.
согласен, zend хорош как библиотека класов, а как стандартный фреймворк явно не самый лучший выбор.
 

HraKK

Мудак
Команда форума
AmdY
Не скажи. Практически любой класс - сырой до безобразия. Еще пару лет ждать точно надо.
апд. Столкнулся с Zend_Cache::File - это то что я написал не глядя в него за 2 часа. Но как только подумал еще 30 минут переписал совершенно по другому и теперь это можно использовать, а ZF_Cache нет. Думаю у них не хватило еще пару часов подумать, просто написали абы было. А вы уже ***сь сами подтачивайте. Любой класс надо пилить. Напрягает.
 

AmdY

Пью пиво
Команда форума
спорить не буду, так как о качестве самого Zend_JSON не знаю, обычно на хостинге есть json_decode, но однажды попался без оного и я нипотратив ни единого часа получил с помощью Zend_JSON нужный функционал.
а вот Zend_Cache я использую постоянно, тоже хочется от него избавиться, есть своя наработка, только нужно будет внедрить теги. но переделывать буду глядя в код zend-а.
претензий куча, но не хочется поднимать кипишь на эту тему, так как сейчас данный фреймворк исполняет роль санитара леса и повышает порог вхождения и не хочется новичков отпугивать, а опытные сами всё понимают.
 
Сверху