Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.09.2011, 17:08
Интересующийся
Отправить личное сообщение для Juli@ Посмотреть профиль Найти все сообщения от Juli@
 
Регистрация: 01.09.2011
Сообщений: 11

Задать класс дочернему элементу
Ребята, привет!

Подскажите,пожалуйста, такую вещь:

Treeview деревья папок. Их 3 и 1 просто список.
Необходимо у кликнутого элемента найти близнецов (с такими же значениями name) и открыть и подсветить их другим цветом в дереве. я это делаю так (часть выдрала из плагина, который использую(jquery.treeview)):
var curName = $(this).attr("name"); 
	var t="a[name="+curName+"]";
  	var current = $('ul.filetree').find(t) .addClass('current');
var items = current.parent().addClass("selected").end().addClass("selected").parents("ul, li").add( current.next() ).show();
var current1 = $('ol.filetree').find(t).addClass('current'); //это просто список, в нем тоже ищем эл-т и добавляем класс
current1.parent().parent().parent().parent().addClass("closed collapsable lastCollapsable").end().parent().addClass("selected").end().addClass("selected2").parents("ol, li").add( current.next() ).show();
	$('a').not(t).removeClass('current');

А еще нужно у кликнутого эл-та найти всех детей и подсветить и открыть все элементы на странице с такими же name как у этих детей(их неск-ко).
Перепробовала все что могла. Из последних попыток:
current.find(">li").addClass('current').add( current.next() ).show();

не помогает. Как быть?
вот к примеру одно из деревьев:
$cur_rel = ''; 
echo '<ul id="browser2" class="filetree">';
while($row = mysql_fetch_assoc($result))
{
   if ($row['parent']!=$cur_rel) 
   {

      echo '<li class="closed"><span class="folder"><a>'.$row['parent'].'</a></span>';                                
      $cur_sys = $row['parent'];
	 }
		echo '<ul>';                     
		echo '<ul><li class="closed"><span class="file"><a name="'.$row['bb'].'" href=# OnClick=clickt("'.$row['bb'].'")>'.$row['child'].'</a></span>'; 
		
     echo '</li>';    
   echo '</ul>';   
echo '</ul>';
Ответить с цитированием
  #2 (permalink)  
Старый 01.09.2011, 19:15
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

>>current.find(">li").addClass('current').add( current.next() ).show();

может так?:

current.find("li").addClass('current').add( current.next() ).show();

и кстати, проверьте на исполнение всех функций хотя бы через тот же firebug, что бы не выдавалось никаких ошибок
Ответить с цитированием
  #3 (permalink)  
Старый 02.09.2011, 08:25
Интересующийся
Отправить личное сообщение для Juli@ Посмотреть профиль Найти все сообщения от Juli@
 
Регистрация: 01.09.2011
Сообщений: 11

Цитата:
может так?:

current.find("li").addClass('current').add( current.next() ).show();
Так тоже пробовала.
firebug ошибок не выдает, но и значение передает пустое.((
Ответить с цитированием
  #4 (permalink)  
Старый 02.09.2011, 16:34
Интересующийся
Отправить личное сообщение для Juli@ Посмотреть профиль Найти все сообщения от Juli@
 
Регистрация: 01.09.2011
Сообщений: 11

Нашла решение. Оказывается надо было поднятся сначала до родителя с тегом li, а потом пройти снова вниз и найти эл-т с тегом a. Только в этот список попадает еще и сам кликнутый элемент с тегом a, поэтому его "вычитаем":
var childs = current.parent().parent().find("a").not(current);

Ну и далее:
var cur_child = childs.attr('name');
	var s ="a[name="+cur_child+"]";
	var act_child = $('ol.filetree').find(s)							  .addClass('current');
	var act_child1 = $('ul.filetree').find(s)							  .addClass('current').parent().addClass("selected").end().addClass("selected").parents("ul, li").show();


И снова проблема!

Скоро буду наверное волосы на голове вырывать!

Я не знаю как этот процесс зациклить(( Ведь "детей " у кликнутого элемента может быть не один, а несколько. А у меня подсвечивает и открывает только один первый элемент.

Сделала так:
var childs = $.makeArray(current.parent().parent().find("a").not(current));

А далее как-то надо применить each..
Подскажите, специалисты....
Ответить с цитированием
  #5 (permalink)  
Старый 02.09.2011, 17:27
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

childs.each(function(){
    //$(this) - current element in childs object array
    //$(this).text("it's works!!!!");
})
Ответить с цитированием
  #6 (permalink)  
Старый 02.09.2011, 18:03
Интересующийся
Отправить личное сообщение для Juli@ Посмотреть профиль Найти все сообщения от Juli@
 
Регистрация: 01.09.2011
Сообщений: 11

Оставила так:
var childs = current.parent().parent().find("a").not(current);
jQuery.each( childs, function (index, value){
	var cur_child = childs.attr('name');
	var s ="a[name="+cur_child+"]";
	var act_child = $('ol.filetree').find(s).addClass('current');
	var act_child1 = $('ul.filetree').find(s)
	.addClass('current').parent().addClass("selected").end().addClass("selected").parents("ul, li").show();

И массив childs не перебирает. Я просто не знаю совершенно синтаксис...
Взяла пример alert(index+':' + childs) - все отлично работает,но как к себе применить не знаю.
А сейчас у меня cur_child и s остаются равны первому значению в списке.
Ответить с цитированием
  #7 (permalink)  
Старый 03.09.2011, 20:37
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Я понимаю так,
1) кто-то щёлкает по ссылке. и она попадает в current
2) ты поднимаешся на два уровня вверх и выбираешь все <a> кроме той на которую щёлкнули
3) начинаешь перебирать все ссылки
4) А ДАЛЬШЕ ЧТО-ТО НЕПОНЯТНО ты пытаешся получить атрибут name у всей коллекции ссылок childs сразу. хотя для того чтобы получить name каждой ссылки в коллекции нужно this.attr, а если только того по которому щёлкнули то current.attr и перед циклом а не внутри него. Нафига childs.attr не понимаю, думаю дело в этом.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.09.2011 в 20:54.
Ответить с цитированием
  #8 (permalink)  
Старый 03.09.2011, 20:44
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Что касается стиля.
Обычно принято оформлять объявление переменных вот так.

var cur_child = childs.attr('name'),   // странная строка
    s = "a[name = " + cur_child + "]",
    act_child = $('ol.filetree').find(s).addClass('current'),
    act_child1 = $('ul.filetree').find(s);
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.09.2011 в 20:46.
Ответить с цитированием
  #9 (permalink)  
Старый 05.09.2011, 08:36
Интересующийся
Отправить личное сообщение для Juli@ Посмотреть профиль Найти все сообщения от Juli@
 
Регистрация: 01.09.2011
Сообщений: 11

Сообщение от DjDiablo
Я понимаю так,
1) кто-то щёлкает по ссылке. и она попадает в current
2) ты поднимаешся на два уровня вверх и выбираешь все <a> кроме той на которую щёлкнули
3) начинаешь перебирать все ссылки
4) А ДАЛЬШЕ ЧТО-ТО НЕПОНЯТНО ты пытаешся получить атрибут name у всей коллекции ссылок childs сразу. хотя для того чтобы получить name каждой ссылки в коллекции нужно this.attr, а если только того по которому щёлкнули то current.attr и перед циклом а не внутри него. Нафига childs.attr не понимаю, думаю дело в этом.
1) попадает в current не только кликнутая ссылка, но и все с таким же name().
2) да
3) все так
4) мне нужны все name всех найденных детей childs всех ссылок current. childs.attr - атрибуты детей текущей ссылки, а не атрибут самой ссылки.
5) далее этих детей надо открыть и подсветить.

Вы правы, сделала так:
var childs = current.parent().parent().find("a").not(current);
	childs.addClass('current').parent().addClass("selected").end().addClass("selected").parents("ul, li").show();

Тогда открывает всех! детей. НО только в двух деревьях((
Есть еще просто
- список ol li, где мне нужно подсвечивать ссылки с childs.attr('name')
- и дерево, где потомки у нужных детей не current(здесь тоже поэтому поиск по name) - здесь этих детей тоже нужно открыть и подсветить. не знаю, понятно ли объяснила..
Ответить с цитированием
  #10 (permalink)  
Старый 05.09.2011, 15:40
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Беда в том что совершенно непонятно что требуется.
Я представляю себе это так.

Есть три элемента интерфейса c информацией в виде дерева, мы назовём такие элементы tree. Допустим каждый tree отображает структуру папок на жёстком диске. 1й tree - диск C, 2й tree - диск D, 3й tree - диск E.

1) когда пользователь щёлкает по папке любого диска, скрипт запоминает имя папки
2) скрипт ищет на всех 3х tree, папки с этими именами.
3) Затем раскрывает все найденные папки на всех дисках, и подсвечивает и найденные папки и их вложенные папки.

Правильно ?
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 05.09.2011 в 16:59.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в общем меню для всех страниц поменять класс определенного пункта в зависимости о phenom Элементы интерфейса 2 08.04.2011 10:09
Jquery немогу установить класс! shureg Общие вопросы Javascript 4 26.10.2010 13:37
setInterval добавлять класс по таймеру igsavenko jQuery 2 06.07.2010 12:00
Присвоение класса элементу с заранее неизвестным ID why.not? Events/DOM/Window 3 01.03.2010 03:47
обратиться к элементу формы, заданному переменной Andrej_2 Элементы интерфейса 4 15.05.2009 08:18