Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Найти в родителе элемент с заданным классом (https://javascript.ru/forum/events/18373-najjti-v-roditele-ehlement-s-zadannym-klassom.html)

tadjik1 29.06.2011 15:48

и для чего вот это условие:

else {
    clickByHideElems( $children, k );
}

tadjik1 29.06.2011 15:57

function clickByHideElems( elems, k ) {
		
    	$children = $(elems).children();
    	if( k == 0 ) {
    		$hideNext = $children.find(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	} else {
    		$hideNext = $children.filter(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	}
    	if ($hideNext.length) {
        	$hideNext.click();
        	console.info(k);
        	if ( k < hashEls.length - 1 ) {
        		k = k+1;
            	clickByHideElems($hideNext.next("div"), k);
       		}
    	} else {
        	clickByHideElems( $children, k );
    	}
}


вот в таком виде вроде бы работает. спасибо!!!

tadjik1 29.06.2011 15:58

только всё равно поясните, пожалуйста, для чего последний else?

tadjik1 29.06.2011 16:00

это в том случае сработает, когда хайдер не в верхнем диве?

melky 01.07.2011 00:48

код в else сработает, когда будет нулевая длина $hideNext

т.е. если этот код ничего не найдет

if( k == 0 ) {
    		$hideNext = $children.find(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	} else {
    		$hideNext = $children.filter(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	}

tadjik1 05.07.2011 13:09

ок, спасибо всем большое за помощь. отдельный респект Никите. код итоговой функции:

function clickByHideElems( elems, k ) {
		
    	$children = $(elems).children();
    	if( k == 0 ) {
    		$hideNext = $children.find(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	} else {
    		$hideNext = $children.filter(".hide-next").filter(function(){ return $(this).text() === hashEls[k]; });
    	}
    	if ($hideNext.length) {
        	$hideNext.click();
        	if ( k < hashEls.length - 1 ) {
        		k = k+1;
            	clickByHideElems($hideNext.next("div"), k);
       		} else {
       			destination = $hideNext.offset().top;
        		$('html,body').animate({ scrollTop: destination }, 1000);
       		}
    	} else {
    	       	clickByHideElems( $children, k );
    	}
}

tadjik1 05.07.2011 19:27

не поверите, но это оказалось еще не всё. есть такая проблема: при нажатии на кнопку «назад» браузера происходит переход на прошлую страницу, а надо бы просто отменять последний открытый хайдер. подскажите, пожалуйста, каким образом это реализовать?

trikadin 05.07.2011 20:20

History API. Правда поддержка браузерами минимальная пока.

tadjik1 06.07.2011 12:23

ну мне как раз нужна полная поддержка))

есть идея сделать через hashchange и onhashchange (IE). только я не знаю каким образом отличить изменение хэша при нажатии на «назад» от изменения при клике.

trikadin 07.07.2011 18:10

Проверять location.hash через setTimeout или setInterval.


Часовой пояс GMT +3, время: 23:43.