Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Спрятать только выделенный элемент (https://javascript.ru/forum/events/55182-spryatat-tolko-vydelennyjj-ehlement.html)

ureech 16.04.2015 18:27

Спрятать только выделенный элемент
 
Здравствуйте. Есть несколько блоков с одинаковым классом
<div class="parent">
<div class="child">...</div>
<div class="child">...</div>
</div>

Хочу при hover скрывать соответственный див
$(".parent").hover(function(){ 
  $(".child").toggleClass("opacity");  
});

Но скрываются естественно все дивы.Подскажите как скрыть див на котором стрелка мыши?

laimas 16.04.2015 18:40

$(".parent div").hover(function(){
    $(this).toggleClass("opacity"); 
});

ureech 16.04.2015 18:43

Цитата:

Сообщение от laimas
$(this).toggleClass("opacity");

Так скрывается весь "parent"

ureech 16.04.2015 18:50

Цитата:

Сообщение от laimas
$(".parent div").hover(function(){
$(this).toggleClass("opacity");
});

Так не работает.

ureech 16.04.2015 18:52

Цитата:

Сообщение от ureech
Так не работает.

сори за повтор

рони 16.04.2015 19:02

Цитата:

Сообщение от ureech
Так не работает.

:-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .opacity  {
      opacity: 0;

  }
  .parent div{
    cursor: default;
  }

  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function(){
$(".parent div").hover(function(){
    $(this).toggleClass("opacity");
});

});


  </script>
</head>

<body>
<div class="parent">
<div class="child">1111</div>
<div class="child">2222</div>
</div>



</body>

</html>

laimas 16.04.2015 19:06

<html> 
<head> 
<style>
.child {
    color: #f00;
}
.opacity {
    color: #0f0;
}
</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $(".parent div").hover(function(){
        $(this).toggleClass("opacity");
    });
});
</script>     
</head> 
<body>
<div class="parent">
<div class="child">aaaa</div>
<div class="child">bbbb</div>
</div>
</body> 
</html>

Что не работает?

ureech 16.04.2015 19:15

Цитата:

Сообщение от laimas
Что не работает?

Во первых в таком виде $(".parent div") не сработало, только так $("div .parent")
А второе, у меня скрывается весь блок "parent"

рони 16.04.2015 19:18

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

ureech 16.04.2015 19:21

Блин, прошу прощения, не правильно сформулировал вопрос. В посте №1 не так
<div class="parent">
<div class="child">...</div>
<div class="child">...</div>
</div>
, а так
<div class="parent">
<div class="child">...</div>
</div>
<div class="parent">
<div class="child">...</div>
</div>
<div class="parent">
<div class="child">...</div>
</div>

И соответственно поэтому так у меня и работает. Извиняюсь.В остальном задача прежняя.

ureech 16.04.2015 19:24

В дальнейшем это дело будет в динамике и в цикле в смарти
{foreach key=tid item=cat from=$list}
<div class="parent">
	<div class="child">...</div>
	</div>
{/foreach}

$tid принимает значения от 0 и далее, может к этому как то привязать?

laimas 16.04.2015 19:25

Во первых $(".parent div") означает - получить все элементы div элемента с классом parent. Чего вам и хочется, хотя правильнее будет так:
$(".parent > div")

только так $("div .parent") - это означает в неком div получить элемент с классом parent. И в каком это div он у вас находится и с чего бы это работало?

Ваше "работает", может быть только так:
$("div.parent > div").hover(function(){
        $(this).toggleClass("opacity");
    });

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

Вам две копии примера показали, они рабочие.

PS. Если parent содержит один элемент, то зачем обращаться к child через него?

ureech 16.04.2015 19:44

Цитата:

Сообщение от laimas
Вам две копии примера показали, они рабочие.

Да, рабочие.
Цитата:

Сообщение от laimas
Если parent содержит один элемент, то зачем обращаться к child через него?

А как по другому? У меня выводит три "parent", в каждом "child". Может в шаблоне onMousover на див повесить? что то поменяется?

laimas 16.04.2015 19:53

Если в "parent" помещается только один "child", то измените в примерах селектор на "div.child". Этого будет достаточно. Если бы необходимо было менять стили только "parent child", не затрагивая "child" в других элементах, тогда бы надо было действовать как показывали. Иначе смысла нет в обращении через "parent".

ureech 16.04.2015 20:05

Цитата:

Сообщение от laimas
то измените в примерах селектор на "div.child".

Не помогает, скрываются все три "child".

laimas 16.04.2015 20:09

Внимательно смотрим на html-код! Ваш? По одному элементу, а не по три и более в "parent", правильно?
<html> 
<head> 
<style>
.child {
    color: #f00;
}
.opacity {
    color: #0f0;
}
</style> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $("div.child").hover(function(){
        $(this).toggleClass("opacity");
    });
});
</script>     
</head> 
<body>
<div class="parent">
    <div class="child">aaa</div>
</div>
<div class="parent">
    <div class="child">bbb</div>
</div>
<div class="parent">
    <div class="child">ccc</div>
</div>
</body> 
</html>

Работает?

рони 16.04.2015 20:15

ureech,
вам тостаточно css - js тут ненужен

ureech 16.04.2015 20:27

Цитата:

Сообщение от laimas
Работает?

Работает. Но мне нужно hover на "parent", так как на "parent" привязана svg анимация, которая работает при hover и при этом и нужно скрыть внутренний див "child"

Цитата:

Сообщение от рони
вам тостаточно css - js тут ненужен

Возможно да, но хотелось бы на js, та как возможно потом прикручу fadeUp или что то подобное.

laimas 16.04.2015 20:28

Ну да, CSS. Только о каких "всех" постоянно идет речь, даже после того ка вроде бы один прописан.

laimas 16.04.2015 20:30

Но мне нужно hover на "parent", так как на "parent" привязана svg анимация

Ну так оставьте селектор, который вам ранее показывали, в чем проблема?

ureech 16.04.2015 20:40

Цитата:

Сообщение от laimas
Ну так оставьте селектор, который вам ранее показывали, в чем проблема?

Ни один из предложенных вариантов не работает.Hover на "child" не реагирует.

laimas 16.04.2015 20:42

Заходим на первую страницу поста, смотрим примеры - именно они вам и нужны.

ureech 17.04.2015 13:13

Всем спасибо. "Разобрался", код работает в таком виде
$(function(){
	$(".parent").hover(function(){ 
  $(this).children('.child').toggleClass('opacity');  
});
});


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