2013-09-03 2 views
0

У меня разные divs, у которых есть id="item". Когда я выбираю один из divs, новый класс должен быть добавлен в a, где был выбран div. Есть ли способ сделать это, когда идентификаторы не уникальны?Добавить класс в выбранный div (div не является уникальным)

HTML:

<div class="something" id="item"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item"> 
    <a href="#" class="something">...</a> 
</div> 

JavaScript (то, что я пытался, но не работает):

// changes all links on the website 
$("body").delegate('#item', 'click', function() { 
    $("a").addClass("active"); 
}); 

Edit: Я использую функцию delegate, потому что я создаю все дивы с PHP, иначе событие клика не будет зарегистрировано.

+5

идентификаторы ** обязательно ** быть уникальным. jQuery останавливает поиск после того, как находит первый соответствующий элемент. –

+4

'id' является ** уникальным ** атрибутом. Там должно быть ** никогда ** два элемента с одинаковым идентификатором. –

+0

Это должно работать нормально, если вы замените '' a '' на '' a ', this' –

ответ

6

У вас никогда не было уникального идентификатора, это недопустимо. Недопустимые идентификаторы в стороне, это не работало с тех пор, как вы использовали $("a"), который предназначен для всех ссылок, а не для конкретного.

HTML:

<div class="something" id="item1"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item2"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item3"> 
    <a href="#" class="something">...</a> 
</div> 
<div class="something" id="item4"> 
    <a href="#" class="something">...</a> 
</div> 

JS

// I doubt your actual site uses something in both cases, 
// but I made this more explicit. 
$("body").on('div.something', 'click', function() { 

    $('.active').removeClass('active'); 

    // Use this to add active to div 
    $(this).addClass("active"); 

    // Use this to add active to link 
    $(this).find('a').addClass('active"); 

}); 

отметить Также я изменил delegate к on предполагая, что вы используете последнюю версию JQuery - если не вернуться к delegate

1

$ (это) .find ("а") addClass ("активный").

+0

Это именно то, что я искал, и единственное решение, которое было представлено до сих пор. Спасибо, rbginge! – doonot

+0

Почему мое решение не работает? Этот код также не обрабатывает недопустимые идентификаторы, а также тот факт, что нажатие нескольких div будет оставаться активным на всех из них. –

-1

Вы должны попробовать это:

<div class="something" id="item1"> 
    <a href="#" class="otherthing">...</a> 
</div> 
<div class="something" id="item2"> 
    <a href="#" class="otherthing">...</a> 
</div> 
<div class="something" id="item3"> 
    <a href="#" class="otherthing">...</a> 
</div> 
<div class="something" id="item4"> 
    <a href="#" class="otherthing">...</a> 
</div> 



$(".something").on('click', '.otherthing', function() { 
    $(this).addClass("active"); 
}); 
+0

Почему я получаю нижний предел? :П –

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