-2

I'm able to get the parent element but I unable to successfully get the child elements and their attributes. I'd like to be able to extract the id in the input element below and put it in the array called links.

I tried this

var links = [];

$(".sportmenu li").each(function(i, item) {
  links.push(
    $(item).children("input")[0].id
  );
});
console.log(links);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="sportmenu ui-listview">
  <li class="table">
    <span class="fav-box table-cell">
          <input type="checkbox" id="TOP_SPORT-246712-Serie B" class="star" readonly="" value="on">
          <label></label>
        </span>
    <div class="competition-info">
      <span class="table-cell">
            <a href="javascript:;" class="ui-link">
              <span class="league">Serie B</span>
      </a>
      </span>
      <span class="val-box table-cell">
            <span class="val">2</span>
      </span>
    </div>
  </li>
</ul>
mplungjan
  • 134,906
  • 25
  • 152
  • 209
andromeda
  • 2,944
  • 3
  • 20
  • 33

4 Answers4

1

You can use find and attr:

var links = [];

$(".sportmenu li").each(function(i, item) {
 links.push(
   $(item).find("input").attr('id')
  );
});

console.log(links)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="sportmenu ui-listview">
  <li class="table">
    <span class="fav-box table-cell">
      <input type="checkbox" id="TOP_SPORT-246712-Serie B" class="star" readonly="" value="on">
      <label></label>
    </span>
    <div class="competition-info">
      <span class="table-cell">
        <a href="javascript:;" class="ui-link">
          <span class="league">Serie B</span>
        </a>
      </span>
      <span class="val-box table-cell">
        <span class="val">2</span>
      </span>
    </div>
  </li>
</ul>
casraf
  • 17,682
  • 7
  • 48
  • 83
1

In your code, just change .children() to .find():

var links = [];

$(".sportmenu li").each(function(i, item) {
  links.push(
    $(item).find("input")[0].id
  );
});

console.log(links);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="sportmenu ui-listview">
  <li class="table">
    <span class="fav-box table-cell">
      <input type="checkbox" id="TOP_SPORT-246712-Serie B" class="star" readonly="" value="on">
      <label></label>
    </span>
    <div class="competition-info">
      <span class="table-cell">
        <a href="javascript:;" class="ui-link">
          <span class="league">Serie B</span>
        </a>
      </span>
      <span class="val-box table-cell">
        <span class="val">2</span>
      </span>
    </div>
  </li>
</ul>

.children is for direct childs, whereas .find() will find any level child.

Docs:
https://api.jquery.com/children/
https://api.jquery.com/find/

Also, note that your ids shouldn't contain spaces.

Hope it helps.

Takit Isy
  • 8,420
  • 2
  • 16
  • 42
1

One option is using map

And on your ids should not contain any spaces as per this SO post.

var ids = $(".sportmenu li input").map(function() {
  return $(this).attr('id');
}).get();

console.log(ids);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul class="sportmenu ui-listview">
  <li class="table">
    <span class="fav-box table-cell">
      <input type="checkbox" id="TOP_SPORT-246712-Serie_A" class="star" readonly="" value="on">
      <label></label>
    </span>
    <div class="competition-info">
      <span class="table-cell">
        <a href="javascript:;" class="ui-link">
          <span class="league">Serie B</span>
      </a>
      </span>
      <span class="val-box table-cell">
        <span class="val">2</span>
      </span>
    </div>
  </li>
  <li class="table">
    <span class="fav-box table-cell">
      <input type="checkbox" id="TOP_SPORT-246712-Serie_B" class="star" readonly="" value="on">
      <label></label>
    </span>
    <div class="competition-info">
      <span class="table-cell">
        <a href="javascript:;" class="ui-link">
          <span class="league">Serie B</span>
      </a>
      </span>
      <span class="val-box table-cell">
        <span class="val">2</span>
      </span>
    </div>
  </li>
</ul>

Doc: map()

Eddie
  • 25,279
  • 6
  • 26
  • 53
1

You can use jQuery.map

var result = $(".sportmenu li input").map(function() {
return this.id
}).get()

console.log(result)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<ul class="sportmenu ui-listview">
  <li class="table">
    <span class="fav-box table-cell">
      <input type="checkbox" id="TOP_SPORT-246712-Serie B" class="star" readonly="" value="on">
      <label></label>
    </span>
    <div class="competition-info">
      <span class="table-cell">
        <a href="javascript:;" class="ui-link">
          <span class="league">Serie B</span>
        </a>
      </span>
      <span class="val-box table-cell">
        <span class="val">2</span>
      </span>
    </div>
  </li>
</ul>
Vladu Ionut
  • 7,407
  • 1
  • 15
  • 28