0
<ul class='list-container'>
<li class='list-item' data-level='parent_level'>
    <ul>
        <li data-level='child_level'> Child 1</li>
        <li data-level='child_level'> Child 2</li>
    </ul>
</li>

<li class='list-item' data-level='parent_level'>
    <ul>
        <li data-level='child_level'> Child 3</li>
        <li data-level='child_level'> Child 4</li>
    </ul>
</li>

This is my HTML code.

I want to print each element in child list. I want to use data-attributes for the same. I tried fetching elements with class. It's working fine.

var list = $('list-container');
list.each(function(){console.log($(this).html())});

With this code I got Following HTML content in output.

 <li class="list-item" data-level="parent_level">
  <ul>
    <li data-level="child_level"> Child 1</li>
    <li data-level="child_level"> Child 2</li>
  </ul>
</li>


<li class="list-item" data-level="parent_level">
  <ul>
    <li data-level="child_level"> Child 3</li>
    <li data-level="child_level"> Child 4</li>
  </ul>
</li>

When I tried same thing using data attributes as follow:

var list= $.find("[data-level='parent_level']");
list.forEach(function(){console.log($(this).html())});

Output of log is 'undefined'.

Replacing '.forEach' with '.each' giving error as '.each is not a function'.

list.each(function(){console.log($(this).html())});
2
  • Did you try using $("[data-level='parent_level']").each(...)? Commented May 30, 2017 at 11:15
  • 1
    $("[data-level='parent_level']").each(...) worked for me. Thanks :) Commented May 30, 2017 at 15:16

2 Answers 2

1

You have some selector issues in your script, check updated snippet below..

var list = $('.list-container');
list.each(function(){console.log($(this).html())});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class='list-container'>
<li class="list-item" data-level="parent_level">
  <ul>
    <li data-level="child_level"> Child 1</li>
    <li data-level="child_level"> Child 2</li>
  </ul>
</li>
</ul>


<li class="list-item" data-level="parent_level">
  <ul>
    <li data-level="child_level"> Child 3</li>
    <li data-level="child_level"> Child 4</li>
  </ul>
</li>

Sign up to request clarification or add additional context in comments.

1 Comment

You've missed out the ul with the actual css class you're targetting - so no output from console.log
0

You dont need to use .find() just call it like var list = $("[data-level='parent_level']");

Even better, $("[data-level='parent_level']").each() will save you a line.

If you don't want the ul that it currently prints, just write: $("[data-level='parent_level'] ul")

var list = $("[data-level='parent_level']");


list.each(function() {
  console.log($(this).html())
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class='list-container'>
  <li class='list-item' data-level='parent_level'>
    <ul>
      <li data-level='child_level'> Child 1</li>
      <li data-level='child_level'> Child 2</li>
    </ul>
  </li>

  <li class='list-item' data-level='parent_level'>
    <ul>
      <li data-level='child_level'> Child 3</li>
      <li data-level='child_level'> Child 4</li>
    </ul>
  </li>
</ul>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.