Reduce this jquery to only 1 block and not 3, how do I do?

Asked

Viewed 48 times

2

How best to reduce this code below to only one block?

It was only using a porem when I put the mouse on an icon the effect Hover appeared to all.

$('.sidebar-chart-1 .icon-info').mouseover(function(){
		$('.sidebar-chart-1 .tooltip-info').show();
	});

	$('.sidebar-chart-1 .icon-info').mouseout(function(){
		$('.sidebar-chart-1 .tooltip-info').hide();
	});
// =====
	$('.distribuicao-fundamental-1 .icon-info').mouseover(function(){
		$('.distribuicao-fundamental-1 .tooltip-info').show();
	});

	$('.distribuicao-fundamental-1 .icon-info').mouseout(function(){
		$('.distribuicao-fundamental-1 .tooltip-info').hide();
	});
// =====
	$('.distribuicao-fundamental-2 .icon-info').mouseover(function(){
		$('.distribuicao-fundamental-2 .tooltip-info').show();
	});

	$('.distribuicao-fundamental-2 .icon-info').mouseout(function(){
		$('.distribuicao-fundamental-2 .tooltip-info').hide();
	});
<h3>Acumulado e Meta do ciclo atual (2016/17)
    <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
    <span class="tooltip-info">informações sobre o gráfico.</span>
</h3>

  • .tooltip-info is the son or brother of .icon-info? could put the HTML?

  • @Guilhermelautert I edited Thank you.

  • You mean 6 blocks to 1, no ?

  • In vdd 3 same, and I consider show action and Hide as a block only. @Magichat

  • Um I drew...;)

2 answers

3


You can do this by creating a new class generic for all elements.

Example

used the class show.

$('.show .icon-info').mouseover(function(){
	$(this).parent().find('.tooltip-info').show();
}).mouseout(function(){
	$(this).parent().find('.tooltip-info').hide();
});
.tooltip-info{
  display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="sidebar-chart-1 show">
  <i class="icon-info">SideBar</i>
  <div class="tooltip-info">
      test 1
  </div>
</div>

<div class="distribuicao-fundamental-1 show">
  <i class="icon-info">Descrição Funcionario</i>
  <div class="tooltip-info">
      test 1
  </div>
</div>

Note

  • There is no need to redeclare the sentence after calling an event in jQuery, you can use chaining, for he returns this.
  • Perfect, thank you very much.

0

The wonder of Jquery is to allow you to select almost everything you want without having to modify the html code, below are some examples:

$('h1 .icon-info').hover(function() {
  $(this) // representa exatamente o 'h1 .icon-info' que disparou o hover, mesmo que tenham outros iguais na pagina
  .siblings('.tooltip-info') // seleciona o seu irmão chamado '.tooltip-info'
  .toggle() // se estiver oculto mostra, se estiver visivel oculta.
  .css({
    top: $(this).offset().top + $(this).outerHeight(),
    left: $(this).offset().left
  }); // posiciona '.tooltip-info' em relação a posição deste 'h1 .icon-info' 
});

$('h2 .icon-info').hover(function() {
  $(this) // representa exatamente o 'h2 .icon-info' que disparou o hover, mesmo que tenham outros iguais na pagina
  .parent() // seleciona o elemento pai
  .find('.tooltip-info') // procura por '.tooltip-info' dentro do pai
  .toggle() // se estiver oculto mostra, se estiver visivel oculta.
  .css({
    top: $(this).offset().top + $(this).outerHeight(),
    left: $(this).offset().left
  }); // posiciona '.tooltip-info' em relação a posição deste 'h2 .icon-info' 
});

$('h3 .icon-info').hover(function() {
  $(this) // representa exatamente o 'h3 .icon-info' que disparou o hover, mesmo que tenham outros iguais na pagina
  .parents('div') // seleciona o primeiro div pai que encontrar
  .next('div') // seleciona o proximo div depois do div pai
  .find('.tooltip-info') // procura por '.tooltip-info' dentro do proximo div
  .toggle() // se estiver oculto mostra, se estiver visivel oculta.
  .css({
    top: $(this).offset().top + $(this).outerHeight(),
    left: $(this).offset().left
  }); // posiciona '.tooltip-info' em relação a posição deste 'h3 .icon-info'
});

$('div > .icon-info').hover(function() {
  $(this) // representa exatamente o 'div > .icon-info' que disparou o hover, mesmo que tenham outros iguais na pagina
  .next('.tooltip-info') // seleciona o proximo '.tooltip-info' depois de 'div > .icon-info'
  .toggle() // se estiver oculto mostra, se estiver visivel oculta.
  .css({
    top: $(this).offset().top + $(this).outerHeight(),
    left: $(this).offset().left
  }); // posiciona '.tooltip-info' em relação a posição deste 'div > .icon-info'
});
.tooltip-info {
  display: none;
  position: absolute;
  border: 1px solid red;
  padding: 10px;
  background: white;
  border-radius: 5px;
  box-shadow: 3px 3px 10px grey;
  font: 14px normal;
  margin-top: 8px;
}
.icon-info {
  cursor: pointer;
}
<link rel="stylesheet" href="https://opensource.keycdn.com/fontawesome/4.6.3/font-awesome.min.css" integrity="sha384-Wrgq82RsEean5tP3NK3zWAemiNEXofJsTwTyHmNb/iL3dP/sZJ4+7sOld1uqYJtE" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<h1>Lorem ipsum
    <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
    <span class="tooltip-info">H1 Lorem ipsum dolor sit amet,<br>consectetur adipiscing elit.</span>
</h1>

<h2>Lorem ipsum
  <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
  <div>
    <span class="tooltip-info">H2 Lorem ipsum dolor sit amet,<br>consectetur adipiscing elit.</span>
  </div>
</h2>

<div>
  <h3>Lorem ipsum
    <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
  </h3>
</div>
<div>
  <span class="tooltip-info">H3 Lorem ipsum dolor sit amet,<br>consectetur adipiscing elit.</span>
</div>

<div>
  Loren
  <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
  <span class="tooltip-info">Lorem sit amet,<br>consectetur adipiscing elit.</span>
  Ipsum
  <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
  <span class="tooltip-info">Ipsum sit amet,<br>consectetur adipiscing elit.</span>
  Dolor
  <span class="icon-info fa fa-info-circle" aria-hidden="true"></span>
  <span class="tooltip-info">Dolor sit amet,<br>consectetur adipiscing elit.</span>
</div>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.