Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Доступ к родительскому элементу по дочернему (https://javascript.ru/forum/jquery/30051-dostup-k-roditelskomu-ehlementu-po-dochernemu.html)

Кирюха =) 22.07.2012 16:26

Доступ к родительскому элементу по дочернему
 
Всем привет. И сразу задачка! Условия: есть несколько div'ов - "родителей" с классом parent, в них бог весть что, но в одном из них есть div с классом children. Как при помощи jQuery получить доступ к этому родителю?
вот для наглядности:
<div class="parent">
</div>

<div class="parent">
    <div id="children">
    </div>
</div>

<div class="parent">
</div>

Гугл ни в какую не хочет подсказывать, прошу помогите а то я убьюсь опасной бритвой
P.S хочу этому родителю display:none влепить....

Dim@ 22.07.2012 16:41

элемент.parentNode
<div id="la">
 <div id="lol">g</div>
</div>
<script>
lol = document.getElementById("lol");
alert(lol.parentNode + " " + lol.parentNode.id)
</script>

Deff 22.07.2012 16:47

<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>
<style type="text/css">
div {
  padding:12px;
  margin:4px;
  min-width:30px;
  max-width:66px;
  border:2px solid red;
}
#children {
  border:2px solid blue;
}
</style>

<div class="parent">
1
</div>

<div class="parent">2
    <div id="children">
    </div>
</div>

<div class="parent">3
</div>

<script type="text/javascript">
var Hide=$("#children").parent("div.parent");
setTimeout('Hide.slideUp("slow")',3000)
</script>

Кирюха =) 22.07.2012 17:03

спасибо ребята, снова вы меня выручили

adm777 12.06.2018 13:57

Добрый всем.
Нуждаюсь в помощи.
Есть фильтр на сайте и кнопка сброса фильтров отображается постоянно "cf_resetAll_link",
Необходимо чтоб пока в фильтре нечего не выбрано скрывать кнопку сброса, хочу это привязать к ссылке выбора фильтров, при выборе фильтров к ссылке добавляется класс "cf_sel_opt". Помогите это реализовать.

<div class="filtr">
<a class="cf_resetAll_link" "href="#"><span class="cf_resetAll_label">Сбросить все фильтры</span></a>
<div class="cf_my_header">
<div>
<div class="cf_wrapper_inner">
<ul class="cf_filters_list">
<li><a href="#" class="cf_option cf_sel_opt">Кремы</a></li>
<li><a href="#" class="cf_option">Тонизирующие лосьоны</a></li>
</ul>		
</div>
</div>
</div>
</div>

рони 12.06.2018 15:05

adm777,
$(function() {
 var resetAll = $(".cf_resetAll_link").hide();
 $(".cf_option").on("click", function() {
    resetAll.toggle($(".cf_sel_opt").length)
});
	});

adm777 12.06.2018 16:01

Большое спасибо, отработало.
Скрылось, и при нажатии появляется на мгновение, пока загружаются результаты. А так понимаю он появляется по клику.? Может можно сделать чтоб когда при нажатии добавляется класс ".cf_sel_opt" добавлять класс к сбросу фильтров ".cf_resetAll_link-vis", чтоб было ".cf_resetAll_link .cf_resetAll_link-vis" и просто в css стилях прописать.

рони 12.06.2018 16:36

adm777,

$(function() {
 var resetAll = $(".cf_resetAll_link");
 $(".cf_option").on("click", function() {
    resetAll.toggleClass("cf_resetAll_link-vis", $(".cf_sel_opt").length)
});
	});

adm777 12.06.2018 16:59

Работает, но во время клика фильтр отрабатывает и перезагружает страницу, и класс "cf_resetAll_link-vis" очищает.
Проблема в том что при фильтрации перезагружает страницу, и чистит класс.
Спасибо.
Буду искать дальше.

рони 12.06.2018 17:23

adm777,
логика работы ваших страниц, известна только вам.

рони 12.06.2018 17:26

adm777,
$(function() {
 var resetAll = $(".cf_resetAll_link").toggleClass("cf_resetAll_link-vis", $(".cf_sel_opt").length);
 $(".cf_option").on("click", function() {
    resetAll.toggleClass("cf_resetAll_link-vis", $(".cf_sel_opt").length)
});
	});

j0hnik 12.06.2018 18:35

adm777,
Вам надо найти обработчик этого фильтра в коде, тут телепатов очень мало.

рони 12.06.2018 19:56

adm777,
<style type="text/css">
        .cf_resetAll_link {
                display: none;
        }
        .cf_resetAll_link-vis {
                display: inline;
        }

    </style>

<script>
jQuery(function() {
 var resetAll = jQuery(".cf_resetAll_link").toggleClass("cf_resetAll_link-vis", jQuery(".cf_option:nth-child(n+2).cf_sel_opt").length);
 jQuery(".cf_option").on("click", function() {
    resetAll.toggleClass("cf_resetAll_link-vis", jQuery(".cf_option:nth-child(n+2).cf_sel_opt").length)
});
	});
</script>

adm777 13.06.2018 09:59

Спасибо.
Но опять все так же.
http://apivita.it-swd.cz/index.php/r...ategorii/kremy

рони 13.06.2018 10:43

adm777,
может где-то старые версии скрипта запускаются
сделайте так перед body
<script>
  var resetAll = jQuery(".cf_resetAll_link").toggleClass("cf_resetAll_link-vis", jQuery(".cf_option:nth-child(n+2).cf_sel_opt").length);


</script>
        </body>

j0hnik 13.06.2018 10:52

<script>
if(document.querySelectorAll(".cf_sel_opt").length==0)  document.querySelector(".cf_resetAll_link").style.display='none';
</script>


или так

adm777 13.06.2018 11:18

Спасибо, но все по прежнему, попробовал оба варианта.

j0hnik 13.06.2018 11:31

setTimeout(function(){
if(document.querySelectorAll(".cf_sel_opt").length==0)  document.querySelector(".cf_resetAll_link").style.display='none';
},1000)


так попробуйте

рони 13.06.2018 11:38

Цитата:

Сообщение от j0hnik
так попробуйте

не поможет!
1 страница формируется неизвестно как и сколько, с 1000 можно не угадать
2. document.querySelectorAll(".cf_sel_opt").length всегда есть!!!
3.
Цитата:

Сообщение от j0hnik
style.display='none'

блокирует смену класса,

j0hnik 13.06.2018 11:48

по второму пункту
Цитата:

Сообщение от рони
2. document.querySelectorAll(".cf_sel_opt").length всегда есть!!!

только что в консоль ткнул, 0 вылетел
подробней если можно.

рони 13.06.2018 11:49

может так ...
setTimeout(function(){
if(document.querySelectorAll(".cf_sel_opt").length < 3)  document.querySelector(".cf_resetAll_link").classList.remove("cf_resetAll_link-vis");
},1000)

рони 13.06.2018 11:56

Цитата:

Сообщение от j0hnik
подробней если можно

Все Категории было тут и тут Все Линии продуктов сейчас нет, и похоже всё заработало

adm777 13.06.2018 11:57

Сработало вот это
setTimeout(function(){
if(document.querySelectorAll(".cf_sel_opt").length ==0) document.querySelector(".cf_resetAll_link").style. display='none';
},0)

Только опустил до 0, теперь победить чтоб при переключении фильтров он не пропадал, а то скачет не по феншую),

Сей час попробую еще ваш вариант.

рони 13.06.2018 12:02

Цитата:

Сообщение от adm777
Сей час попробую еще ваш вариант.

length == 0 если не поможет, и у вас там bootstrap.min.js отвалился может из-за него и были проблемы?

adm777 13.06.2018 12:22

Вот тут на ноль опустил
.style. display='none'; },0)
bootstrap.min.js грузится.


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