2013-08-13 2 views
0

Каков наилучший способ добавить текущий класс в .navimg divs (рядом с li) при нажатии на их родительскую ссылку?Добавление текущего класса в div по ссылке нажмите

HTML:

<div id="navbox">  
    <ul id="navigation"> 
     <li id="home"><a href="#">HOME</a></li>        <div id="imghome" class="navimg current"></div> 
     <li id="corp_gov"><a href="#">CORPORATE <br /> GOVERNANCE</a></li> <div id="imggov" class="navimg"></div> 
     <li id="board"><a href="#">BOARD &amp; <br /> DIRECTORS</a></li>  <div id="imgboard" class="navimg"></div> 
     <li id="permit"><a href="#">PERMIT <br /> DETAILS</a></li>   <div id="imgpermit" class="navimg"></div> 
     <li id="corp_dir"><a href="#">CORPORATE <br /> DIRECTORY</a></li>  <div id="imgdir" class="navimg"></div> 
    <li id="contact"><a href="#">CONTACT</a></li>        <div id="imgcontact" class="navimg"></div> 
</ul> 
</div> 

Я попытался использовать это, что я нашел в другом вопросе о здесь, используя кучу вариаций, но он не работает прямо сейчас:

JQuery

$(document).ready(function() {   
    $("#navbox ul li a").click(function(e) { 
     $(".current").removeClass("current"); 
     $(this).nextAll("div.navimg").first().addClass("current"); 
}); 

Это лучший способ использования или что бы вы предложили? Должен ли я создать новую функцию для каждой ссылки или вы можете использовать эту работу для всех?

Я попытался это, а также попробовать и цель каждой ссылки конкретно, но это не сработало:

$("li#home a").click(function(e) { 
    $(".current").removeClass("current"); 
    $("#imghome").addClass("current"); 

Спасибо всем

EDIT: Я сделал jsFiddle показывая, что происходит: http://jsfiddle.net/Amp3rsand/vGTpW/2/

+0

доля HTML для 'navimg' –

+0

@ArunPJohny Это там. Прокрутите направо – dc5

+0

Должно было сделать это более очевидным или переместить div под ли, я полагаю – Ampersand

ответ

1

Я доработан в HTML, чтобы включить imgnav внутри ли.

Проверьте скрипку. http://jsfiddle.net/ScQtx/

JQuery:

var $allNavImgs = $('.navimg'); 
$("a","#navbox").on('click',function(e){ 
    e.preventDefault(); 
    $allNavImgs.removeClass('current'); 
    $(this).siblings().filter('.navimg').addClass('current'); 
}); 

HTML:

<div id="navbox">  
    <ul id="navigation"> 
     <li id="home"> 
      <a href="#">HOME</a> 
      <div id="imghome" class="navimg current"></div> 
     </li>        
     <li id="corp_gov"> 
      <a href="#">CORPORATE <br /> GOVERNANCE</a> 
      <div id="imggov" class="navimg"></div> 
     </li>  
     <li id="board"> 
      <a href="#">BOARD &amp; <br /> DIRECTORS</a> 
      <div id="imgboard" class="navimg"></div> 
     </li>  
     <li id="permit"> 
      <a href="#">PERMIT <br /> DETAILS</a> 
      <div id="imgpermit" class="navimg"></div> 
     </li>    
     <li id="corp_dir"> 
      <a href="#">CORPORATE <br /> DIRECTORY</a> 
      <div id="imgdir" class="navimg"></div> 
     </li>  
    <li id="contact"> 
     <a href="#">CONTACT</a> 
     <div id="imgcontact" class="navimg"></div> 
    </li>        
</ul> 
</div> 
+0

меньше, когда речь идет о производительности селектора в jQuery. Этот селектор применяет один прослушиватель в навигационной панели и прослушивает, когда щелкнут LINK. Поскольку первый выбор - это идентификатор, он очень быстрый. Это также сработает, если вы захотите добавить дополнительные детали в DOM позже. – Daniel

+0

Спасибо за помощь, но я не могу сделать ваше предложение. Могу ли я спросить, почему вы переместили navimg внутри ли? Ваш jsfiddle отлично работает, но похоже, что перемещение navimg нарушило анимацию зависания. Я ссылаюсь на это неправильно, но я не вижу, где. Я разработал свой jsfiddle с вашим предложением, и вы можете понять, что я имею в виду, если вы раскомментируете свой пример html: http://jsfiddle.net/Amp3rsand/8b8BX/1/ – Ampersand

+0

http://jsfiddle.net/8b8BX/3/ you не было включено jQuery. Похоже на работу. – Daniel

3

Вы забыли добавить .parent()

jsFiddle

$("#navbox ul li a").click(function (e) { 
    $(".current").removeClass("current"); 
    $(this).parent().next("div.navimg").addClass("current"); 
}); 
+0

Хм, это имеет смысл, но он все еще не делает это для меня. Посмотрите мой jsfiddle, показывающий, что я пытаюсь сделать: http://jsfiddle.net/Amp3rsand/vGTpW/2/ – Ampersand

+0

В чем проблема? – Shivam

+0

Я не уверен. Щелчок просто ничего не делает. Я пытаюсь сделать то, что предложил Даниэль сейчас, кажется логичным, так что пальцы скрещены – Ampersand

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