【问题标题】:jQuery nextUntill id < num or alternativejQuery nextUntil id < 数字或替代
【发布时间】:2010-04-25 15:26:54
【问题描述】:

我正在使用 jQuery 根据它们的类显示/隐藏不同的 LI 元素。看看这个例子。

<li id="1" class="fp de1"></li> 
<li id="2" class="fp de1"><button onclick="hide(2,2);"></li> 
<li id="3" class="fp de2"><button onclick="hide(3,3);"></li> 
<li id="4" class="fp de3"><button onclick="hide(4,4);"></li> 
<li id="5" class="fp de4"></li>
<li id="6" class="fp de3"></li>
<li id="7" class="fp de3"></li>
<li id="8" class="fp de1"><button onclick="hide(8,2);"></li> 
<li id="9" class="fp de2"><button onclick="hide(9,3);"></li> 
<li id="10" class="fp de3"><button onclick="hide(10,4);"></li> 
<li id="11" class="fp de4"></li> 

您会发现其中一些具有隐藏功能的按钮。我想要的是,当您按下隐藏按钮时,应隐藏 .de# 类中具有较高编号的以下元素,直到它到达具有相同 .de#-class 的 LI。

因此,如果您按下 hide(),我希望隐藏 ID 为 3、4、5、6、7 的 LI。 如果我按下下一个,我想要 4、5、6、7,而我想要隐藏 id 5 的 thir。

这是我为它制作的 Javascript:

function hide(id,de){
 var de2 = de-1;
 $('#'+id).nextUntil('li.de'+de2).hide();
}

问题是这个功能不能完全按照我的意愿工作。它可以在第一个 hide() 函数和第三个函数中正常工作,但不能在第二个 hide() 函数中正常工作。在这里它将隐藏 ID:4-8。所以我想做点什么。所以我希望 nextuntill() 隐藏元素,直到它到达具有相同 .de# 或较低 .de#的 LI 元素。

我希望我没有在我对问题的描述中将其复杂化。如果你有比使用 nextUntill 我全神贯注更好的主意。

【问题讨论】:

  • 第一件事:你的“id”值不能只是数字——它们必须以字母或“_”开头。

标签: javascript jquery list


【解决方案1】:

如果我理解您要做什么,我认为如果您解决您的 ID 问题并更改以下行,它可能会起作用

$('#'+id).nextUntil('li.de'+de2).hide();

类似

$('#'+id).nextUntil(selector).hide();

其中选择器是从 de2 生成的,这样当 de2 为 1 时选择器为 'li.de1',当 de2 为 2 时选择器为 'li.de1, li.de2' 等等。

【讨论】:

  • 我认为你错过了像 karim79 一样的真正问题,即当 .de-class 中的数字相同或更低时它应该停止。
  • 我的选择器会这样做。我建议构建一个选择器,它是一个以逗号分隔的选择器列表,盯着 li.de1 并继续直到达到上限值。它不漂亮,但我认为您不能编写一个可以像这样对类名的一部分进行数字比较的选择器。
  • 啊哈,我想我误解了你。看起来这可以工作。我试过后会报告的。
【解决方案2】:

这似乎有效:

$(document).ready(function() {

    // instead of inline javascript
    $("button").click(function() {

        // get the second className
        var parentClass = $(this).parent().attr("class").split(" ")[1];
        $(this).parent().nextUntil("." + parentClass).hide();
    });
});

稍微改变了标记,去掉了内联的 JS 和数字 ID(这里实际上并不需要 ID):

<li class="fp de1">test 1</li>
<li class="fp de1">test 2<button>Hide</button></li>
<li class="fp de2">test 3<button>Hide</button></li>
<li class="fp de3">test 4<button>Hide</button></li>
<li class="fp de4">test 5</li>
<li class="fp de3">test 6</li>
<li class="fp de3">test 7</li>
<li class="fp de1">test 8<button>Hide</button></li>
<li class="fp de2">test 9<button>Hide</button></li>
<li class="fp de3">test 10<button>Hide</button></li>
<li class="fp de4">test 11</li>

【讨论】:

  • 不幸的是,这并没有做到。当您按下第二个按钮时,它将隐藏测试 4-8。我希望它隐藏 4-7。我希望在 de# 相同或更低时停止 nextutill。在这个例子中,按下的是 .de2,所以它应该停在 .de1。也许我应该使用 nextUntill 以外的其他东西来做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多