2013-09-27 4 views
5

Я хочу заменить один div другим при наведении на него. В частности, будет среднее число слов, таких как «борьба» или «превышение ожиданий», и я хочу заменить это на числовое среднее, когда пользователь наводит курсор на среднее значение в словах.заменить один div другим на зависание

#html 

<div class="switch avg_words float_left"> 
    A+ (hover to see score) 
</div> 
<div class="avg_num"> 
    AVG = 98.35% 
</div> 

#css 

.avg_num { 
display: none; 
} 

#jquery 

$('.switch').hover(function() { 
    $(this).closest('.avg_words').hide(); 
    $(this).next('div').closest('.avg_num').show(); 
}, function() { 
    $(this).next('div').closest('.avg_num').hide(); 
    $(this).closest('.avg_words').show(); 
}); 

Это достаточно легко, чтобы скрыть первый DIV и заменить его со вторым, но беда с кодом, чтобы установить вещи в нормальное состояние, когда при наведении курсора концы. Теперь на hover, div s просто моргают между собой.

http://jsfiddle.net/uXeg2/1/

+0

, как вы можете сделать это с только CSS? Любой хороший ресурс? – masciugo

+0

принятый ответ - лучший и самый простой способ сделать это, я думаю – dax

+0

Мне все равно удалось: http://jsbin.com/nazase/3/edit?html,css,output. Любые советы приветствуются – masciugo

ответ

10

Переместите класс переключатель к Outter DIV, как и

<div class="switch"> 
<div class="avg_words float_left"> 
    A+ (hover to see score) 
</div> 
<div class="avg_num"> 
    AVG = 98.35% 
</div> 
</div> 

$('.switch').hover(function() { 
     $(this).find('.avg_words').hide(); 
     $(this).find('.avg_num').show(); 
    }, function() { 
     $(this).find('.avg_num').hide(); 
     $(this).find('.avg_words').show(); 
}); 

Обновлено Fiddle: http://jsfiddle.net/uXeg2/2/

+0

Или, что сказал Стефан Мюллер .... –

+0

не знал, как использовать 'find' - туда мы идем! спасибо :) – dax

+1

найти поиск в контексте вашего селектора, который у вас не был как 'div', где на том же уровне. Вложенность не всегда делает код довольно, но наверняка поможет в таких случаях. –

4

мигающего является результатом того, как вы создали классы. Поскольку .switch и .avg_words являются точно таким же элементом, это то, что происходит:

  1. Вы парить .switch
  2. .avg_words скрыты, что означает .switch скрыт (это же ДИВ!)
  3. Поскольку .switch скрыт вы не парит его больше
  4. .avg_words показан сразу
  5. вы теперь парит .switch снова, потому что это было только что показано (на этапе 4)
  6. назад к шагу 1

Вместо этого убедитесь .switch элемент обернут вокруг .avg_words, так что он не получает скрытый когда вы наведете его.

+0

Я думал, что это может быть частью проблемы - я играл с этим некоторое время, но не смог заставить работу работать из-за слоев div. (не удалось определить правильное расположение 'next' для использования). благодаря! – dax

2

Вы сталкиваетесь с проблемами, потому что вы скрываете и тот же элемент, который привязан к событию парения. Попробуйте изменить разметку:

<div class="switch float_left"> 
    <div class="avg_words"> 
     A+ (hover to see score) 
    </div> 
    <div class="avg_num"> 
     AVG = 98.35% 
    </div> 
</div> 

Затем изменить свой JavaScript, чтобы что-то вроде этого:

$('.switch').hover(function() { 
     $(this).find('.avg_words').hide(); 
     $(this).find('.avg_num').show(); 
    }, function() { 
     $(this).find('.avg_num').hide(); 
     $(this).find('.avg_words').show(); 
}); 
1

Я хотел бы использовать mouseover и mouseout для этого:

$('.switch .avg_words').mouseover(function() { 
    $(this).hide(); 
    $(this).closest('.avg_num').show(); 
}); 

$('.switch .avg_num').mouseout(function() { 
    $(this).hide(); 
    $(this).closest('.avg_words').show(); 
}); 
+0

Это то, что функция наведения ... –

+0

@ agrothe на самом деле не работает, зависание работает для одного и того же элемента, эта альтернатива работает при наведении мыши на первую, а затем на выводе для второго;) –

+0

достаточно верно , Я просто стараюсь не писать такой код сам, но это, скорее всего, личное предпочтение. –

Смежные вопросы