2016-08-16 3 views
0

Нужно выделить текущий наведенный элемент + все остальные элементы с тем же именем цвета/класса.Функция наведения JQuery выбирает все элементы с одним и тем же именем класса.

Пример здесь:

https://codepen.io/Kerrys7777/pen/LkaYOW

jQuery(document).ready(function($) { 
    $('.orange-cell, .green-cell, .purple-cell, .white-cell').hover(function() { 
     $(this).addClass('z-relative'); 
     $('#darkness').fadeTo(200, 1); 
    },function() { 
     $(this).removeClass('z-relative'); 
     $('#darkness').fadeTo(200, 0, function(){ 
      $(this).hide(); 
     }); 
    }); 
}); 
+0

Итак, в чем вопрос? –

+0

В настоящее время выделяется только один элемент при зависании. Нужна помощь с селектором jQuery, чтобы все элементы одного цвета получили класс «z-relative». – Kerry7777

ответ

2

Ниже приведены изменения, необходимые для вашего кода.

HTML ИЗМЕНЕНИЙ:

<ul> 
    <li class="cell orange-cell" data-color="orange">Home</li> 
    <li class="cell green-cell" data-color="green">About</li> 
    <li class="cell purple-cell" data-color="purple">Contact</li> 
    <li class="cell white-cell" data-color="white">Num</li> 
</ul> 

<h1>Some text here</h1> 

<ul> 
    <li class="cell orange-cell" data-color="orange">Home</li> 
    <li class="cell green-cell" data-color="green">About</li> 
    <li class="cell purple-cell" data-color="purple">Contact</li> 
    <li class="cell white-cell" data-color="white">Num</li> 
</ul> 

<h1>Some text here</h1> 

<ul> 
    <li class="cell orange-cell" data-color="orange">Home</li> 
    <li class="cell green-cell" data-color="green">About</li> 
    <li class="cell purple-cell" data-color="purple">Contact</li> 
    <li class="cell white-cell" data-color="white">Num</li> 
</ul> 

<div id="darkness"></div> 

JS Изменения:

jQuery(document).ready(function($) { 
    $('.orange-cell, .green-cell, .purple-cell, .white-cell').hover(function() { 
     var color = $(this).attr('data-color'); 
     $("."+color+"-cell").addClass('z-relative'); 
     $('#darkness').fadeTo(200, 1); 
    },function() {var color = $(this).attr('data-color'); 
     $("."+color+"-cell").removeClass('z-relative'); 
     $('#darkness').fadeTo(200, 0, function(){ 
      $(this).hide(); 
     }); 
    }); 
}); 
+0

Это работает отлично, но я пытался избежать добавления дополнительной html-разметки. Благодарю. – Kerry7777

1

если вы не хотите, чтобы изменить HTML вы можете сделать, как это.

jQuery(document).ready(function($) { 
    $('.orange-cell, .green-cell, .purple-cell, .white-cell').hover(function() { 
     var colorClass = $(this).attr('class').split(' ')[1]; 
     $("."+colorClass).addClass('z-relative'); 
     $('#darkness').fadeTo(200, 1); 
    },function() {var colorClass = $(this).attr('class').split(' ')[1];; 
     $("."+colorClass).removeClass('z-relative'); 
     $('#darkness').fadeTo(200, 0, function(){ 
      $(this).hide(); 
     }); 
    }); 
}); 
+0

Это работает без изменений в моей разметке HTML. Пытается следить за тем, что вы делаете, с переменной colorClass. Вы делаете переменную с «этим», затем разделяете ее, затем объединяете + addClass? Два других пункта: 1). Нужно ли переписывать одну и ту же переменную 2). Угадывание ;; это опечатка? Спасибо – Kerry7777

+1

1) Да, потому что $ (this) даст соответствующий элемент каждый раз. 2) Я его опечатка ошибка. вы можете принять ответ, если он вам поможет. –

1

Пробуйте этот код. Одна вещь, которую вы должны отметить здесь, что вам нужно всегда добавлять класс цвета (зеленая ячейка, оранжевая ячейка) на второе место внутри вашего тега li

jQuery(document).ready(function ($) { 
    var highlitedClass; 
    $('.orange-cell, .green-cell, .purple-cell, .white-cell').hover(function() { 
     $(this).addClass('z-relative'); 
     var liClass = $(this).prop("class"); 
     $('#darkness').fadeTo(200, 1); 
     liClass = liClass.split(' '); 
     highlitedClass = liClass[1]; 
     $("." + highlitedClass).addClass('z-relative'); 

    }, function() { 
     $(this).removeClass('z-relative'); 
     $("." + highlitedClass).removeClass('z-relative'); 
     $('#darkness').fadeTo(200, 0, function() { 
      $(this).hide(); 
     }); 
    }); 
}); 
+0

Это прекрасно работает и для меня. Спасибо – Kerry7777

+0

Всегда приветствую :) –