2013-11-02 2 views
3

Я использую функцию наведения jQuery для зависания над классом box-empty. При зависании он заменяет box-empty на box-full.jQuery hover несколько блоков

  1. При наведении курсора на блок, как я могу навешивать все предыдущие блоки?
  2. При нажатии на блок, как я могу добавить класс box-full ко всем предыдущим блокам?

Edit: К сожалению, я забыл упомянуть, что мне нужно, чтобы включить блок, который был щелкнул/парить также (не только предыдущие).

enter image description here

Вот мой код:

HTML:

<div class="wrap"> 
    <span class="box box-empty"></span> 
    <span class="box box-empty"></span> 
    <span class="box box-empty"></span> 
    <span class="box box-empty"></span> 
</div> 

JQuery:

$('.box-empty').hover(function() { 
     $(this).addClass('box-full'); 
     $(this).removeClass('box-empty'); 
    }, function() { 
     $(this).addClass('box-empty'); 
     $(this).removeClass('box-full'); 
    }); 

Demo: http://jsfiddle.net/aCP9x/

ответ

4

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

$('.box-empty').hover(function() { 
    $(this).prevAll().addBack().toggleClass('box-full box-empty'); 
}); 

Updated fiddle

Примечание Я также упростили свой код, используя toggleClass, что означает та же функция может выполняться на mouseenter и mouseleave в hover.

+0

Большое вам спасибо за ответ, а также за улучшение кода. Извините, я забыл упомянуть, мне нужно включить div, который был нажат/hover (а не только предыдущие). – user1251698

+0

@ user1251698 вот что он должен делать. Разве это не работает для вас? –

+0

@RoryMcCrossan Это то, что он делает. Я [fork] (http://jsfiddle.net/FxJrL/) редактировал скрипт, чтобы сделать так, чтобы панель оставалась в состоянии, когда мышь уходит. Не то, о чем попросил ОП, но, вероятно, чего он хочет. –

3

Чистый CSS Подход:

span:hover ~ span, span:hover { 
    border: 1px solid #000; 
    background: #000; 
} 

jsFiddle here

Как отметил Fabrício Матовый ниже, вы можете воспользоваться CSS CheckBox хака, что позволяет эффективно переключаться между выбранными/невыбранные.

+0

OP хотел, чтобы только те, что слева от того, что зависали, были выделены, я не думаю, что это возможно в CSS. –

+1

@RoryMcCrossan Мне удалось выяснить это: http://jsfiddle.net/TfyaR/ .. просто ничего не могу сделать о нажатии функций в CSS, так что это бесполезно. –

+2

На самом деле возможно с некоторыми хакерами http://jsfiddle.net/ult_combo/TfyaR/1/ –

0
$('.box').hover(
    function() { 
     $('.box:lt(' + ($(this).index() + 1) + ')').toggleClass('box-full box-empty'); 
    }, 
    function() { 
     $('.box:lt(' + ($(this).index() + 1) + ')').toggleClass('box-empty box-full'); 
} 
); 
Смежные вопросы