1

我必须制作我制作的数组。一个抓取一些锚标签,另一个抓取一组 ul。锚标记都有一个名称属性,并且 ul 具有与锚标记名称属性匹配的 id。除此之外,所有 ul 都有“.students”和“.hidden”类。(所有 .hidden 所做的就是设置显示:无)

<div>
  <ul>
      <li><h4><a name="5th-grade">5th Grade</a></h4></li>
      <li><h4><a name="6th-grade">6th Grade</a></h4></li>
      <li><h4><a name="7th-grade">7th Grade</a></h4></li>
      <li><h4><a name="8th-grade">8th Grade</a></h4></li>
  </ul>
</div>
<div>
  <ul id="5th-grade" class="students hidden ">
      <li>Billy Bob</li>
  </ul>

  <ul id="6th-grade" class="students hidden">
      <li>Bob Sackamano</li>
  </ul>

  <ul id="7th-grade" class="students hidden">
      <li>Matt Blunt</li>
  </ul>
</div>

我想要做的是拥有它,所以当我点击其中一个锚标签时,它会将其对应的名称属性与具有相同 id 的 ul 匹配,通过删除“.hidden”类使其出现,然后隐藏通过添加“.hidden”类不匹配的任何其他 ul。

到目前为止,这是我使用一个小 jquery 提出的内容以及我停止的地方:

    var aGradelist = $('#grade-list ul li a');
    var aStudents = $('.students');

    aGradelist.click(function(){
        var i = '#' + $(this).attr('name');

        $('.students'+i).removeClass('hidden');

        for(var j=0;j<aStudents.length;j++)
        {
           console.log(aStudents.attr('id')[j]);
        }

});

让正确的 ul 出现没有问题,但我无法将“.hidden”类添加到其他 ul 中。我安慰它发现至少我的一个问题是在for循环中,我不是通过aStudents数组中的每个ul,而是通过aStudents数组中第一项的id的字母。

我是否以正确的方式接近这个?你对如何做到这一点有一些想法吗?

4

2 回答 2

2

如果您的 html 是有效的(没有重复的 ID),这应该可以解决问题。

var aGradelist = $('#grade-list ul li a');
var aStudents = $('.students');
aGradelist.click(function() {
    aStudents.addClass('hidden');
    $('#' + $(this).attr('name')).removeClass('hidden');
});

当您在其上调用方法时,jQuery 会开箱即用地迭代 DOM 元素。

此外,如果您想知道初始循环出了什么问题,您应该[j]在检索id字符串属性之前使用。所以要id正确检索属性:

for(var j=0;j<aStudents.length;j++) {
   console.log(aStudents[j].id);
}

$()[j]$().get(j)( jQuery.fn.getdocs ) 的简写。

于 2013-02-08T02:49:16.327 回答
1

试试这个:

var aGradelist = $('#grade-list ul li a');
var aStudents = $('.students');

aGradelist.click(function(){
    var i = '#' + $(this).attr('name');
    aStudents.addClass('hidden');
    $('ul' + i).removeClass('hidden');
}

这样做是将hidden类添加到所有uls 中,然后仅从具有被单击ul的 id 的类中删除它anchor

于 2013-02-08T02:48:04.667 回答