jquery:在选择子项时将addclass添加到父项

时间:2012-07-22 09:07:42

标签: jquery parent-child addclass

http://jsfiddle.net/DfcdQ/

<ol id="nav">
<li><a href="a.php" class="selected">A</a>
  <ol class="child">
  <li><a href="a-1.php">A-1</a></li>
  </ol>
</li>
<li><a href="b.php">B</a>
  <ol class="child">
  <li><a href="b-1.php">B-1</a></li>
  <li><a href="b-2.php">B-2</a></li>
  </ol>
</li>
<li><a href="c.php">C</a>
  <ol class="child">
  <li><a href="c-1.php">c-1</a></li>
  <li><a href="c-2.php">c-2</a></li>
  <li><a href="c-3.php">c-3</a></li>
  <li><a href="c-4.php">c-4</a></li>
  </ol>
</li>
</ol>

选择子菜单时,也会选择其父菜单。 以下代码适用于子css但不适用于父级。

var loc = 'c-3.php';

$("#nav a").each(function() {
  $(this).removeClass("selected");
  if (loc.indexOf($(this).attr("href")) != -1) {
      $(this).addClass("selected");
      $(this).parent().addClass("selected"); /* <=== doesn't work :( */
  }
});

这个也不起作用......

$(this).closest('ol').parent().addClass("selected");

3 个答案:

答案 0 :(得分:1)

你对父母感到困惑,这有效:http://jsfiddle.net/DfcdQ/7/

var loc = 'c-3.php';

$("#nav a").each(function() {
   $(this).removeClass("selected");
   if (loc.indexOf($(this).attr("href")) != -1) {
       $(this).addClass("selected");
       $(this).parent().parent().siblings(':first').addClass("selected");
   }
});​

$(this).parent()是指<li><a href="c-3.php">c-3</a></li>,它不是指<a href="c.php">C</a>

答案 1 :(得分:0)

我同意bingjie2680,但取决于你是否希望c.php锚具有选定的类(bingjie2680解决方案)或所有项目的li(下方)。

$(本).parent()的父()的父()addClass( “选择”);。。。

答案 2 :(得分:0)

我基于最近的修改。

$(this).closest('ol').parent('li').find('a').addClass("selected");

以下是工作小提琴链接http://jsfiddle.net/DfcdQ/12/