2015-12-25 6 views
3

У меня есть следующий HTML: установкаИзменить стиль родительского элемента с JQuery

<div class="one"> 
    <div class="two"> 
     <a href="#" class="three">Click</a> 
    </div> 
</div> 

И я хочу, чтобы изменить цвет фона для элемента с классом .one, когда я нажимаю на элемент .three с jQuery.

Это то, что я пытался использовать:

$(function(){ 
    $('.three')(function(){ 
     $(this).parent().parent().css('backgroundColor', 'red'); 
    }) 
}); 

Вот скрипку пример: https://jsfiddle.net/Munja/a7unbs2p/

Я искал решение здесь на SO, но не смог найти его достаточно быстро (вероятно, я не выглядел достаточно хорошо: /).

спасибо.

+0

Whoa, спасибо @adeneo! –

ответ

4

вам нужно использовать .click() или .on('click') .. и вы можете использовать .closest(), а вместо того, чтобы использовать parent() дважды

$(function(){ 
    $('.three').on('click',function(){ 
     $(this).closest('.one').css('backgroundColor', 'red'); 
    }) 
}); 
+1

Да, спасибо. @adeneo был немного быстрее с его комментарием :) Спасибо вам обоим. –

+0

Что делать, если у меня есть несколько элементов с именем класса .two и я также хочу изменить фон для всех .two элементов (одна и та же настройка, и только первый элемент .two имеет элемент. Три внутри него)? Возможно, у вас есть идея? –

+0

@DejanMunjiza Это то, что вы ищете? https://jsfiddle.net/mohamedyousef1980/a7unbs2p/6/ .. Я действительно не могу понять, может быть, вы можете объяснить это лучше, сказав (мне нужно, когда я нажму ... Мне нужно ... изменить) ... может быть, таким образом я могу понять, что вы хотите –

1

Поскольку это descedant элемента, вы можете использовать .parents(), который не перемещается вверх до селектора найден.

Кроме того, вы можете использовать синтаксис CSS внутри метода CSS (background-color вместо backgroundColor).

$('.three').on('click', function(){ 
    $(this).parents('.one').css('background-color', 'red'); 
}) 
+0

Что делать, если у меня больше элементов с тем же классом? Например, если с этой установкой у меня есть 3 элемента с именем .two class, и я хочу изменить фон (например,) для всех трех элементов одновременно? –

+0

Я не уверен, что понимаю. '.два класса не участвуют в этом примере; это в основном пропущено. Можете ли вы обновить свой вопрос, и я обновлю свой ответ? –

+0

Извините, попробуйте этот путь. Я хочу изменить фон для всех элементов с классом «.row» в этом примере: https://jsfiddle.net/adeneo/a7unbs2p/1/ –

0

Я не могу комментировать, так, немного дополнение к высшему ответу:

$(function(){ 
    $('.three').on('click',function(){ 
     $(this).closest('.one').css('background-color', 'red'); 
    }) 
}); 

Css не обладает свойством с именем BackgroundColor

+1

В отличие от фонового цвета CSS, вам нужно написать backgroundColor, поскольку Javascript интерпретирует дефис как операцию вычитания. –

+0

Спасибо, я этого не знаю! – fabulaspb

1

Просто добавьте Нажмите событие в вашем коде. Сначала добавьте jquery.min.js, затем добавьте скрипт. Вы можете сделать это:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script> 
    $(".three").click(function(){ 
     $(this).parent().parent().css("background","red"); 
    }); 
</script> 
+0

$ ('. Three'). Родители ('# somedive'). Css ('prop', 'value') – sairfan

0

Вы можете использовать что-то вроде этого.

$('.three').on('click',function(){ 
    $(this).closest('.one').css('backgroundColor', 'red'); 
}) 
+0

И в чем разница между вашим ответом и может ответить? –

+0

Нет разницы, но так ли это, что я не могу придумать подобное решение? – Hemal

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