【问题标题】:jQuery nextUntil attribute is less then or equal to valuejQuery nextUntil 属性小于或等于值
【发布时间】:2015-10-12 14:24:11
【问题描述】:

我有以下工作正常,但我需要对其进行调整,以便它比较数据文件夹级别与小于或大于。

$elem.nextUntil( $("li[data-folder-level="+level+"]"), "li" ).remove();

我试过了……

$elem.nextUntil( $("li[data-folder-level<="+level+"]"), "li" ).remove();

但这不起作用。

有什么想法吗?

编辑:

示例 html

<li data-folder-level="0"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">CLICK ME!!!!!!!!!!!!!!!</a></li>
<li data-folder-level="2"><a href="#">Will be removed...</a></li>
<li data-folder-level="2"><a href="#">Will be removed...</a></li>
<li data-folder-level="2"><a href="#">Will be removed...</a></li>
<li data-folder-level="3"><a href="#">Will be removed...</a></li>
<li data-folder-level="0"><a href="#">Hello world</a></li>
<li data-folder-level="0"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">Hello world</a></li>
<li data-folder-level="0"><a href="#">Hello world</a></li>
<li data-folder-level="0"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">Hello world</a></li>
<li data-folder-level="1"><a href="#">Hello world</a></li>
<li data-folder-level="2"><a href="#">Hello world</a></li>
<li data-folder-level="2"><a href="#">Hello world</a></li>
<li data-folder-level="2"><a href="#">Hello world</a></li>

因此,单击列表中的第 3 个将删除接下来的 4 个列表项。

【问题讨论】:

  • 试试filter过滤数据
  • jQuery 没有&lt;= 属性选择器。您能否发布您的 HTML,以便我们了解如何解决此问题。
  • @Tushar... 我接受了您的建议,但除非您将其发布为答案,否则我无法真正相信您!
  • 元素应该如何移除?本级 + 1 或level &lt;= thislevel+1
  • 在所示示例中,应删除后续 4 个元素(文件夹级别大于 1) - 当它到达文件夹级别小于或等于 1 的元素时停止。

标签: javascript jquery nextuntil


【解决方案1】:

根据文档,nextUntil 需要选择器或元素作为第一个参数。

然而,从 jQuery 1.7 开始,函数似乎也可以工作了。所以你可以使用

$elem.nextUntil(function () {
  return $(this).attr("data-folder-level") <= level;
}, "li").remove(); 

$("ol").on("click", "li", function () {
  var level = +$(this).attr("data-folder-level");
  $(this).nextUntil(function () {
    return $(this).attr("data-folder-level") <= level;
  }, "li").remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ol>
  <li data-folder-level="0"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">CLICK ME!!!!!!!!!!!!!!!</a></li>
  <li data-folder-level="2"><a href="#">Will be removed...</a></li>
  <li data-folder-level="2"><a href="#">Will be removed...</a></li>
  <li data-folder-level="2"><a href="#">Will be removed...</a></li>
  <li data-folder-level="3"><a href="#">Will be removed...</a></li>
  <li data-folder-level="0"><a href="#">Hello world</a></li>
  <li data-folder-level="0"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">Hello world</a></li>
  <li data-folder-level="0"><a href="#">Hello world</a></li>
  <li data-folder-level="0"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">Hello world</a></li>
  <li data-folder-level="1"><a href="#">Hello world</a></li>
  <li data-folder-level="2"><a href="#">Hello world</a></li>
  <li data-folder-level="2"><a href="#">Hello world</a></li>
  <li data-folder-level="2"><a href="#">Hello world</a></li>
</ol>

【讨论】:

  • 为什么没有记录?
【解决方案2】:

没有任何 &lt;= 数据属性选择器,但您可以使用 jQuery nextUntilfilter 方法来检查您的后续元素数据属性并采取相应措施。

代码:

$("li").click(function () {
    var $elem = $(this);
    var level = $(this).attr("data-folder-level");
    $elem.nextUntil().filter(function () {
        return $(this).attr("data-folder-level") > level;
    }).remove();
});

演示:http://jsfiddle.net/x0Lwvhc3/

编辑

由于您想限制删除深度更改,您可以使用each,如果发现更改,请使用return false 停止。

代码:

$("li").click(function () {
    var $elem = $(this);
    var level = $(this).attr("data-folder-level");
    $elem.nextUntil().each(function () {
        if ($(this).attr("data-folder-level") <= level) {
            return false;
        } else {
            $(this).remove();
        }
    })
});

演示:http://jsfiddle.net/91jL1j6t/

【讨论】:

  • 您可以安全地删除var $elem = $(this);,因为这里不需要缓存上下文
  • filter 内仅使用return parseInt($(this).attr("data-folder-level")) &lt;= level
  • 这会删除超过 4 个后续元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 2013-09-02
  • 1970-01-01
  • 2017-06-16
  • 2016-09-30
  • 2011-09-12
  • 1970-01-01
相关资源
最近更新 更多