Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 24.11.2011, 13:15
Интересующийся
Отправить личное сообщение для cbone Посмотреть профиль Найти все сообщения от cbone
 
Регистрация: 19.11.2011
Сообщений: 11

Сообщение от ksa Посмотреть сообщение
2. Таки делать рекурсию.
Этот путь мне кажется более универсальным и логичным.
Ответить с цитированием
  #22 (permalink)  
Старый 24.11.2011, 13:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

cbone, хозяин - барин...
Ответить с цитированием
  #23 (permalink)  
Старый 08.12.2011, 12:21
Интересующийся
Отправить личное сообщение для cbone Посмотреть профиль Найти все сообщения от cbone
 
Регистрация: 19.11.2011
Сообщений: 11

Реализовал я поставленную задачу. Также сделал подборщика. Может кому пригодится:
$(document).ready(function() {
	//Задали массивы
	var ConfigName = ["Наименование", "Мощность, Вт", "Напряжение, В", "Ток, А"]; //Массив для названия каждого уровня массива Config
	var Config = {
			"БПИ": {
				"30": {
					"12": [ "2.5" ],
					"24": [ "1.25" ],
					"48": [ "0.65" ]
				},
				"60": {
					"12": [ "5.0" ],
					"24": [ "2.5" ],
					"36": [ "1.5" ],
					"48": [ "1.25" ]
				},
				"125": {
					"12": [ "10.0" ],
					"24": [ "5.0" ],
					"48": [ "2.5" ]
				},
				"250": {
					"12": [ "20.0" ],
					"24": [ "10.0" ],
					"48": [ "5.0" ]
				}
			}
	};
	
	//##############################################################################
	
	// Рекурсивная функция для вывода конфигураций товара
	var ResultArray = [];
	var current_level = -1;
	
	function Recursion(Arr){
		current_level++;
		if(Arr instanceof Object){
			for ( var key in Arr) {
				if (Arr instanceof Array) {
					content = Arr[key];
				} else if (Arr instanceof Object) {
					content = key;
				}
				
				if(ResultArray[current_level] == null) {
					ResultArray[current_level] = content+";";
				} else {
					if(ResultArray[current_level].indexOf(content) == -1) {
						ResultArray[current_level] = ResultArray[current_level]+content+";";
					}
				}
								
				Recursion(Arr[key]);
			}
		}
		current_level--;
	}
	
	Recursion(Config); //Вызвали рекурсивную функцию 
	
	/* наводим порядок в массиве ResultArray[] и переносим данные в двумерный массив */
	var SplitArray = [];
	for ( var int = 0; int < ResultArray.length; int++) {
		ResultArray[int] = ResultArray[int].slice(0, -1);
		SplitArray[int] = ResultArray[int].split(";");
		
	}
	
	/* Вывод формы подбора в браузер */
	for ( var int = 0; int < ConfigName.length; int++) {
		if(int == 0) {
			$("#wrap").append("<dl></dl>");
		} else {
			$("#wrap").append("<dl class=\"dn\"></dl>");
		}
		$("#wrap dl:eq("+int+")").append("<dt>"+(int+1)+". "+ConfigName[int]+":</dt>");
		for ( var int2 = 0; int2 < SplitArray[int].length; int2++) {
			$("#wrap dl:eq("+int+")").append("<dd><span><a class=\"das\" href=#>"+SplitArray[int][int2]+"</a></span></dd>");
		}
	}
	
	/* Обработка событий */
	$("a.das").click(function(){
		var current_dl = $(this).parents("dl").index(); // Текущий <dl>
		var length_conf = $("dl").size(); // К-во <dl>
		
		
		/* Убрали лишние class="active" */
		for(var int=current_dl; int<length_conf; int++){
			$("dl:eq("+int+") span").removeClass("active");
		}
		
		/* Добавили нужному элементу class="active" и убрали всем лишним на текущем уровне */
		$(this).parents("dl").find("span").removeClass("active");
		$(this).parent("span").toggleClass("active");
		
		/* Формируем массив active_arr[] */
		var active_arr = []; // Массив для хранения <span class="ACTIVE">
		for ( var int = 0; int < current_dl; int++) {
			active_arr[int] = $("dl:eq("+int+") span.active a.das").text();
		}

		/* Формируем массив, содержащий конфигурацию для следующего подуровня */
		var ConfigTemp = Config;
		for ( var int=0; int<active_arr.length; int++) {
			ConfigTemp = ConfigTemp[active_arr[int]];
		}
		var correct_arr = [];
		for ( var key in ConfigTemp) {
			if (current_dl < (length_conf-1)) {
				correct_arr.push(key);
			} else {
				correct_arr.push(ConfigTemp[key]);
			}
			
		}
		
		/* Скрыли все <dd> следующего уровня */
		$("dl:eq("+(current_dl)+") dd").hide();
		
		/* Показали только подходящие */
		count_dd = $("dl:eq("+(current_dl)+") dd").length;
		
		for ( var int = 0; int < correct_arr.length; int++) {
			for(var int2=0; int2<count_dd; int2++) {
				if( $("dl:eq("+(current_dl)+") dd:eq("+int2+") span a").text() == correct_arr[int] ) {
					$("dl:eq("+(current_dl)+") dd:eq("+int2+")").show();
				}
			}
		}
		
		$(this).parents("dl").nextAll("dl").delay(200).hide(); //Скрыли
		$(this).parents("dl").next("dl").fadeIn(); //Показали
		
		if(count_dd == 0) {
			$("form").fadeIn();
		} else {
			$("form").hide();
		}
		
		return false;
	});
	
	$("form input[type=submit]").click(function(){
		//var query = 
		return false;
	});
});

Если кому интересно посмотреть рабочий пример, пишите в личку - дам ссылку.

Последний раз редактировалось cbone, 08.12.2011 в 12:23.
Ответить с цитированием
  #24 (permalink)  
Старый 18.11.2014, 15:17
Новичок на форуме
Отправить личное сообщение для Henocra Посмотреть профиль Найти все сообщения от Henocra
 
Регистрация: 10.11.2014
Сообщений: 8

помогите найти ошибку в коде
var mas = new Array();
mas[0] = new Array();
mas[0] = "aaa";
mas[1] = new Array();
mas[1] = "bbb";
Ответить с цитированием
  #25 (permalink)  
Старый 18.11.2014, 15:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Henocra
mas[0] = "aaa";
mas[0][0] = "aaa";
Сообщение от Henocra
mas[1] = "bbb";
mas[1][0] = "bbb";
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многомерный массив javascript simple Общие вопросы Javascript 20 03.11.2010 02:11
ajax и многомерный массив cat9 AJAX и COMET 1 03.10.2010 15:25
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
добавить элементы в ассоциативный массив noer Элементы интерфейса 7 14.05.2009 10:41
ассоциативный массив где ключ это год или ..... Sandr Общие вопросы Javascript 8 18.07.2008 15:39