2

I have the following which works OK, but I need adapt it so that it compares the data-folder-level against being less than or greater to.

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

I tried this...

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

But that doesn't work.

Any ideas?

EDIT:

Example 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>

So clicking on the 3rd in the list would remove the next 4 list items.

Tom
  • 12,776
  • 48
  • 145
  • 240

2 Answers2

2

According to the docs, nextUntil expects either a selector or an element as the first argument.

However, since jQuery 1.7, functions seem to work too. So you can use

$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>
Oriol
  • 274,082
  • 63
  • 437
  • 513
1

There isn't any <= data-attribute selector, but you can use jQuery nextUntil and filter methods in order to check your sequent elements data-attribute and act accordingly.

Code:

$("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();
});

Demo: http://jsfiddle.net/x0Lwvhc3/

EDIT

Since you want to limit the deletion on the depth change you can use each and if a change is found stop it using return false.

Code:

$("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();
        }
    })
});

Demo: http://jsfiddle.net/91jL1j6t/

Irvin Dominin
  • 30,819
  • 9
  • 77
  • 111