隐藏一定范围childrenjQuery

Hide a certain range of children jQuery

我正在为一堆页面构建一个公共 header 并传入变量以设置标题文本等。我​​有一个面包屑菜单,我只想显示适当的步骤数这页纸。这是我的菜单 html:

<ol id="meter" class="">
<li>Page 1</li>
<li>Page 2</li>
<li>Page 3</li>
<li>Page 4</li>
</ol>

然后我有一个看起来像这样的函数:

function levels() {
$("#meter").addClass(stepNumber);
}

在第一页上,我将 class 设置为 "one",在第二页上设置为 "two",等等

如果 class 是 "one",我只想显示第一项。如果是"two",我只想显示第一个和第二个,等等

我知道我可以用 css 做一些事情,我为每个 class 写一个样式,但这看起来有点傻。我该如何使用 jQuery 来代替?

为什么不使用 for 循环加上一些 jQuery 来将相关数量的元素设置为显示状态?例如:

var count = // number from class
var listElements = $('#meter').children()
for (i = 0; i < count; i++) {
    $(listElements[i]).addClass('active');
}

在这里,'active' class 会附加一个显示器 属性。这对你有意义吗?

请注意,您需要编辑子 class 名称,以便它们可以用作 for 循环中的索引。

尝试将 className 设置为 12 -> 100,并利用 :gt() Selector 选择器

function levels(stepNumber) {
  $("#meter").addClass(stepNumber)
    .find("li:gt(" + (stepNumber - 1) + ")")
    .hide();
}

levels(2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<ol id="meter" class="">
  <li>Page 1</li>
  <li>Page 2</li>
  <li>Page 3</li>
  <li>Page 4</li>
</ol>

或者,要保持添加 className 作为 onetwo -> onehundred,可以创建一个对象来表示每个 [= 显示的项目数22=]

var keys = {
  1: "one",
  2: "two",
  3: "three",
  4: "four"
};

function levels(stepNumber) {
  $("#meter").addClass(keys[stepNumber])
    .find("li:gt(" + (stepNumber - 1) + ")")
    .hide();
}

levels(2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<ol id="meter" class="">
  <li>Page 1</li>
  <li>Page 2</li>
  <li>Page 3</li>
  <li>Page 4</li>
</ol>

您可以为每个页面添加相关的 类。例如:"page_1"、"page_2"...

<ol id="meter" class="">
<li class="page_1">Page 1</li>
<li class="page_2">Page 2</li>
<li class="page_3">Page 3</li>
<li class="page_4">Page 4</li>
</ol>

添加这个 css:

#meter li{display:none;}

脚本将是:

function currentPage(pageNum){ 
        $("#meter li").each(function(){
            if(parseInt($(this).attr("class").split("_")[1]) <= pageNum){
                $(this).show();
            }else{
                $(this).hide();
            }
        })
    }

你会像这样触发它:

currentPage(3);

这是 jsfiddle 示例:https://jsfiddle.net/216tw9u7/