Javascript.RU

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

огромное спасибо вам!

а я поленился прочитать документацию к prev, думал неьлзя в него селектор передавать
Ответить с цитированием
  #12 (permalink)  
Старый 28.06.2011, 17:47
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

ну вот, дальше — хуже.

код чуть изменил, чтобы слэш не прыгал, добавил простенькое условие:
$('.hide-next').click(function() {
    var parentEls = $(this).parents("div").prev('.hide-next')
            .map(function () {
                    return $(this).text();
            })
            .get().join("/");
    if(parentEls == "") { parentEls = $(this).text(); }
    else { parentEls =  parentEls+"/"+$(this).text(); }
    window.location.hash = parentEls;
 });


но теперь мне нужно по сформировавшейся ссылке открыть все эти элементы.
получается что-то вроде

var hash = decodeURIComponent(location.hash.substring(1));
		
		var hashEls = hash.split("/");
		
		if($("*").find(".hide-next:contains("+hashEls[0]+")").trigger("click")) { 
		for(var num = 1;num<hashEls.length;num++) {
				$("*").find(".hide-next:contains("+hashEls[num]+")").trigger("click");
			}
		}


но это не совсем то опять что нужно, потому что contains ищет просто совпадение и в итоге разворачивает всё, что только можно. скажите, пожалуйста, как лучше реализовать поиск в этом случае? нужно, чтобы только «те» элементы открывались, т.е. элементы с одинаковым text() могу встречаться на одной странице. я так понимаю, надо как-то связывать с иерархией, ориентироваться на предков и детей. но то ли конец дня, а скорее полная безрамотность в jquery не позволяют додумать код.
Ответить с цитированием
  #13 (permalink)  
Старый 28.06.2011, 18:04
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

$(".hide-next").each(function(){
  var $self = $(this);
  if ( $.inArray( $self.text(), hashEls ) > -1 ) {
    $self.click();
  }
})
Ответить с цитированием
  #14 (permalink)  
Старый 29.06.2011, 10:08
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

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

есть предположение, что можно в самом-самом верхнем диве найти первый хайдер, затем в его чилдрен второй и т.д.
Ответить с цитированием
  #15 (permalink)  
Старый 29.06.2011, 10:36
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

tadjik1, тогда остается только такой алгоритм
Ответить с цитированием
  #16 (permalink)  
Старый 29.06.2011, 10:56
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

var hash = decodeURIComponent(location.hash.substring(1));
		
		var hashEls = hash.split("/");
		
		$(".hide-next").each(function(){
 			var $self = $(this);
  			if ($self.text() == hashEls[0]) {
    				$self.click();
  			}
  			$self.children('.hide-next').each(function() {
  				var lll = $(this);
  				if ( $.inArray( $lll.text(), hashEls ) > -1 ) {
    				$self.click();
  				}	
  			
  			})
		});
Ответить с цитированием
  #17 (permalink)  
Старый 29.06.2011, 12:04
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

а, нет, не так. это не его дети, а соседские)
Ответить с цитированием
  #18 (permalink)  
Старый 29.06.2011, 13:05
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

function openHider () {
		var hash = decodeURIComponent(location.hash.substring(1));
		var hashEls = hash.split("/");
		$(".hide-next").each(function(){
 			var $self = $(this);
  			if ($self.text() == hashEls[0]) {
    				$self.click();
    				hashEls = hashEls.splice(0,1);
    				var child = $self.next().children();
    				openNextHiders(hashEls, child);
  			}
  		});
} 			
function openNextHiders(hashElss, childs) { 
		childs.find('.hide-next').each(function() {
			var $self = $(this);
			if ($self.text() == hashElss[0]) {
				$self.click();
				hashElss = hashElss.splice(0,1);
                                childs = $self.next().children();
				openNextHiders(hashElss, childs);
			}
		});		
}


проблема в том, что массив стирается полностью в первой функции, не только 0-вой элемент. подскажите, пожалуйста, в каком месте нарушена логика?

Последний раз редактировалось tadjik1, 29.06.2011 в 13:10.
Ответить с цитированием
  #19 (permalink)  
Старый 29.06.2011, 13:18
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

var hashEls = decodeURIComponent( location.hash.replace( /^#/, "" ) ).split("/");
function clickByHideElems( elems, k) {
	var $children = $(elems).children();
	var $hideNext = $children.filter(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
	if ( $hideNext.length ) {
		$hideNext.click();
		if ( k < hashEls.length - 1 ) {
			clickByHideElems($hideNext.next("div"), k++);
		}
	} else {
		clickByHideElems( $children, k );
	}
}	
clickByHideElems( document.body, 0 );
Ответить с цитированием
  #20 (permalink)  
Старый 29.06.2011, 15:07
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

не могу понять, в чем ошибка, но кликает только по первому элементу..
кстати, в document.body filter() не работает, там приходится через файнд() искать, дальше уже через фильтер. но факт остаётся фактом — кликт только по первому элементу. смотрю в консоли хрома переменная объявилась правильно, она глобальная.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать следующий элемент с классом zsaz jQuery 1 02.03.2011 11:59
Найти элемент ниже скрипта Vladislav_V Javascript под браузер 8 12.01.2011 08:47
Найти элемент "A" по "HREF" Nitrogen jQuery 4 27.10.2010 19:19
Отладка. При клике на элемент найти функцию-обработчик в коде romangaag Events/DOM/Window 3 24.10.2010 03:09
Найти элемент под курсором Гость Элементы интерфейса 16 11.12.2009 14:08