views:

28

answers:

3

I am trying to count the child elements of an OL

jQuery :

$(document).ready(function(){

$("#my_select").change(function(){
    alert($("#ol3").children.length);
                                     });});

HTML:

<ol id="ol1">
    <li class="2">Location 1-1</li>
</ol>

<ol id="ol2">
    <li class="15">Location 2-1</li>
    <li class="20">Location 2-2</li>
</ol>

<ol id="ol3">
    <li class="17">Location 3-1</li>
    <li class="16">Location 3-2</li>
    <li class="14">Location 3-3</li>
</ol>

I always get the number 2 no matter how many li are there under the ol.

Know what's going on..?

+2  A: 

Try children() instead of children.

For a belt-and-suspenders approach, try children('li').

Ken Redler
:) Thanks! that was fairly simple.
DMin
I like the saying "belt-and-suspenders"
JerSchneid
+2  A: 

try

$("#ol3").children().length \\ you missed () in children...

when you do $("#ol3").children.length it returns the number of arguments in the .children() function...

try alerting $("#ol3").children and you will get this...

function (d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}

where d and f are the two arguments... that's why you are always getting 2 in your code when you alert..

Reigel
:) Thanks! that was fairly simple.
DMin
cool :) glad to help! cheers!
Reigel
+1 for pointing out what the "2" signifies.
Ken Redler
+1  A: 

you can also use .size() instead of .length()

either one works, though .length() is supposedly faster.

JSD
kaie, didn't know that.
DMin