Организация цикла в подгруппе
Привет всем .
|
$('li').click(function(){ var li_id=$(this).attr('id'); $(this).parent().each(function(){ var current_li = $(this); });//end each });//end click |
Может вам лучше нанять программиста?
|
$('li').click(function() { var a = $.map($(this).siblings(), function(e) { return e.id }); a.push(this.id); alert(a) }); |
Цитата:
Каким образом интерпретируется щелчок по элементу - выбор пользователя? Тогда каким боком к этому имеют отношения другие элементы списка? Так что чего и для чего все это, понятия не имею, а значит и ответ на вопрос вряд ли вы от кого-то получите. |
Вот об этом, а не через пень колоду не понятно о чем, и надо было писать в вопросе.
Получить дерево не сложно, но еще раз - это полнейший бред с точки зрения передачи параметров серверу. PS. Если обрабатываются щелчки по элементам списка, то зачем вообще нужен им тег А? |
Какой-то кошмар. Охота понять как получить - значит изучать методы jQuery. Если же задача получения и отправления на сервер, то в ТЗ этой задачи явно не хватает "исходных данных".
Получить ветвь (дерево) не сложно, в обработчике это будет var tree = $(this).parents('li'), которое нужно "развернуть" и обходом в цикле получить нужное, так как не может быть для сервера как super_gadzetas_B=>super_gadzetas=>gadzetai=>musu_p rekes, должно быть наоборот. Без разницы какая база MS Access или же MySQL, и так и другая работает с полями. И если говорить о дереве описанном в базе, то для сервера данные запроса должны указывать какие поля и с каким данными запрашиваются, а не слать ему нечто невразумительное musu_p rekes=>gadzetai=>super_gadzetas=>super_gadzetas_B, тем более кверху каком. Следовательно данные клиента должны соответствовать определенному набору что в вашем меню и попытках напрочь отсутствует. |
Цитата:
Уж коли вопрос стоит о том как получить данные выбранной ветви для передачи серверу, то в первую очередь надо представлять как эти данные будут интерпретированы сервером. А как можно вышивать, крестиком или гладью, не важно, так как и получить эти данные можно различным способом (инструментами языка). Вы топчитесь у мелочей, не понимая главного. Допустим, что ID элементов списка, это значения идентификаторов дерева описанного в SQL таблице. Поля таблицы имеют имена от A до F, в которых описаны идентификаторы дерева начиная от родителя и вниз. Запрос может содержать любое количество этих идентификаторов. Ваш список кроме идентификаторов более ничего не содержит. Как связать значения запроса с полями SQL таблицы, например для того, чтобы составить условие WHERE для запроса к таблице по значениям этих идентификаторов? Если данные списка в общем никак не связаны с полями таблицы, то выход только один - данные в запросе должны быть в том же порядке, в котором они расположены в SQL таблице, то есть от родителя и ниже. Передать на сервер массив не имеющий ключей для РНР нельзя, если только его не передавать как JSON. Если же формировать объект для Ajax, то объект обязательно должен иметь свойство=>значение. Если принять во внимание, что число не может быть свойством объекта, а париться с ним как со строкой не охота, то можно поступить и иначе - ID элемента списка, это будет свойство объекта, а его индекс в коллекции значением этого свойства. То есть на сервер будут передан развернутый массив, в котором значения (идентификаторы) являются ключами, а индексы (порядок в дереве/полях SQL таблицы) будут значениями. $(function() { $('li').click(function(e) { e.stopPropagation(); var obj = {}; $(this).parents('li').add(this).each(function(i, e) { obj[e.id] = i }); $.post(location, obj, function(d) { alert(d) }) }); }); Сервер такой массив и ожидает, только сервер знает истинные имена полей, которые свяжет их со значениями по их индексам. if($_POST) { $keys = ['A', 'B', 'C', 'D', 'E', 'F']; //имена полей SQL таблицы $data = array_flip($_POST); $where = 'WHERE '.implode(' AND ', array_map(function($k, $v) { return $k . '=' . $v; }, array_intersect_key($keys, $data), $data)); exit($where); } В результате выбора в списке super_gadzetas_B и запроса, клиент получит ответ WHERE A=musu_prekes AND B=gadzetai AND C=super_gadzetas AND D=super_gadzetas_B. А ведь не обязательно так, и ваша первейшая задача представлять данные на клиенте так, чтобы сервер их однозначно интерпретировал как данные связанные со структурой SQL таблицы, иначе все эти ваши уроки коту под хвост. alert() - это диалог, ничего развернуть он просто не может. |
Цитата:
Когда оказалось, что вы имели ввиду дерево (а кто бы мог догадаться, чего вы там в уме держали?), встал вопрос "а как надо?". Хрен его знает как же вам надо было. А это ведь определяется назначением этих данных, которые клиент и формирует. Следовательно и формат этих данных, и их формирование может быть различным. А не зная чего нужно, каким образом можно дать ответ на ваш вопрос? Да никаким, ибо любой из них может опять оказаться "не, не так...". Хотите просто научится "бегать" по DOM структуре, так выполняйте простые примеры, изучая различные методы jQuery, без всяких простраций "есть дерево из базы, надо ... и т.д.", чтобы не заставлять отвечающих вам догадываться за вас чего вы там решаете. Ибо уже с точки зрения SQL id="super_gadzetas_B" и это и есть идентификаторы дерева в базе, по которым его элементы связаны, это очень неудачный выбор. И если даже так, то да, чтобы получить на сервере список такого дерева, то получение его "древним" способом потребует рекурсии. В тоже время, чтобы получить из базы элемент какой либо ветви этого дерева рекурсии не требуется. А это означает, что получение "Тип услуги > Тип товара > Фирма" для отправления на сервер есть пагубный подход, так как чтобы серверу понять что запрашивается, он вынужден будет обойти полученный многомерный массив рекурсивно. Вот так. Думайте когда даже просто задаете вопрос, поясняя то, чего вы там в уме держите. |
Цитата:
Цитата:
А мое изложение не надо считать за грубости, я же не буду в каждом предложении добавлять смайлик ( :) ), типа все норм. Ну что такое. Думайте когда задаете вопрос, описывайте его суть, какая задача преследуется, предоставляйте код. Ответят, не волнуйтесь, иначе и получится - какой вопрос, такой и ответ. Причем тут форум и его обитатели? |
Часовой пояс GMT +3, время: 12:54. |