2013-07-18 3 views
0

Я хотел бы применить наложение к элементу, на котором наводится символ, если он соответствует определенным критериям, или первому родительскому элементу, который соответствует критериям, если это не так.Выберите элемент или первый соответствующий родительский элемент с помощью jQuery

Учитывая следующий пример HTML и предполагая, я хочу, чтобы применить наложение к любому элементу с классом «соответствует»:

<div class='matches'> 
    some Text <span>some more text</span> 
</div> 

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

Единственный способ, которым я могу думать, это следить за событием зависания на каждом отдельном элементе, который кажется очень неэффективным. Это нормально делать, или есть лучший способ сделать это?

ответ

1

Это должно работать

$('.matches').on('mouseenter', function(e) { 
    // $(this) is .matches element 
}) 

Edit - оригинал был слишком сложным. $(this) должен быть тем элементом, который вы хотите.

Проводка решения Аскер здесь, чтобы сделать его легче найти:

http://jsfiddle.net/swwh8/1/

$('.matches').hover(function(e) { 
    $('.matches').removeClass('highlight'); 
    $(this).addClass('highlight'); 
    e.stopPropagation(); 
}, function (e) { 
    $(this).removeClass('highlight'); 
    $(this).parent().closest('.matches').addClass('highlight'); 
}); 
+0

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

+0

думаю. Взгляните на это: http://jsfiddle.net/swwh8/. Если я понимаю, чего вы хотите, эта скрипка не совсем правильная, но она близка. Он работает, если вы переходите от внешнего элемента к внутреннему элементу, но не наоборот, потому что, когда вы переходите от внутреннего элемента к внешнему, наведение на внешний элемент не срабатывает, потому что технически, когда вы зависали внутренний элемент, вы также зависели от внешнего элемента. –

+0

Я думаю, вы понимаете проблему и в значительной степени прибиваете ее. Вы правы, что я также хочу захватить, когда он покидает ребенка и возвращается к родителям. Я добавил строку к вашему образцу, и он отлично работал (по крайней мере, в этом супер простом сценарии). Для тех, кто нуждается в обновлении, вы можете получить его здесь http://jsfiddle.net/swwh8/1/ Спасибо! – NorthFork

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