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 28.06.2011 10:58

Найти в родителе элемент с заданным классом
 
Добрый день.
Бьюсь на следующей задачей:

структура хтмл такая:

<h3 class="hide-next">1</h3>
  <div>
  <h4 class="hide-next">2</h4>
    <div>
    <h5 class="hide-next">3</h5>
      <div>
      </div>
    </div>
  </div>

и так далее.

так вот, мне нужно при клике на элементе hide-next найти всех его предков hide-next`ов. и их значение поместить в хэш-тэг страницы, чтобы при клике на самый нижний заголов в адресе получилось http://***.ru#1/2/3

получается пока что-то такое:

$('.hide-next').click(function() { 
		
		$(this).parents()
				.map(function () { 
                  		return this.prev().text; 
                })
            	.get().join("/");
         		                      
		window.location.hash = parentEls;


});


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

Sweet 28.06.2011 11:12

Круто! Даже в доку посмотрел. Только не туда посмотрел: там пример ниже показывает, что можно в parents селектор задавать:
.parents(".hide-next")

nikita.mmf 28.06.2011 11:27

.map(function () { 
  return $(this).text();
})

tadjik1 28.06.2011 11:30

$('.hide-next').click(function() { 
		var parentEls = $(this).parents('.hide-next')
		.map(function () { 
                  	return $(this).text(); 
                })
            	.get().join("/");
                window.location.hash = parentEls;
});

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

tadjik1 28.06.2011 12:18

$('.hide-next').click(function() { 
		
		var parentEls = $(this).parents('.hide-next')
				.map(function () { 
                  		return $(this).text(); 
                })
            	.get().join("/");
        console.info(parentEls);              
		//window.location.hash = parentEls;


	 });

вот такой код выводит в консоль пустые строчки.

tadjik1 28.06.2011 12:25

может быть это из-за того, что .hide-next не является родителем нашего элемента, по которому кликнули?

nikita.mmf 28.06.2011 13:03

$('.hide-next').click(function() { 
	var parentEls = $(this).parents("div").children('.hide-next')
			.map(function () { 
					return $(this).text(); 
			})
			.get().join("/");
	console.info(parentEls);              
	//window.location.hash = parentEls;
 });

tadjik1 28.06.2011 13:29

о, так работает. только это не до конца решает задачу. дело в том, что в одном диве может быть много элементов hide-next, кроме того, при клике на них висит функция, которая добавляет класс эктив и разворачивает следующий за ним элемент. конкретная задача — «запомнить весь путь до интересующего нас хайдера»

tadjik1 28.06.2011 13:35

<h3 class="hide-next">1</h3>
<div>
    <p>111</p>
    <h4 class="hide-next">11</h4>
    <div>
        <p>12123</p>
        <h5 class="hide-next">asda</h5>
        <ul>
            <li>a</li>
            <li>b</li>
        </ul>
    </div>
    <h4 class="hide-next">22</h4>
           <p>12123</p>
   </div>
<h3 class="hide-next">2</h3>
<div>
        <p>12123</p>
        <h5 class="hide-next">asda</h5>
        <div>
        <span class="hide-next">111</span>
            <p>123123</p>
        </div>    
    </div>
<h3 class="hide-next">3</h3>
<div>
        <p>12123</p>
        <h5 class="hide-next">asda</h5>
        <ul>
            <li>a</li>
            <li>b</li>
        </ul>
    </div>


вот в это констукции по клику на хайдер внутри верхнего дива (по одному из двух) функция вернет значения обоих. если сделать проверку по классу "active", который навесится после клика, тоже может вернутся оба значения, если пользователь до этого открывал предыдущий. т.е. мою задачу по созданию ссылки на конкретный хайдер это не решает

nikita.mmf 28.06.2011 13:41

$('.hide-next').click(function() { 
	var parentEls = $(this).parents("div").prev('.hide-next')
			.map(function () { 
					return $(this).text(); 
			})
			.get().join("/");
	console.info(parentEls);              
	//window.location.hash = parentEls;
 });


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