Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show all child nodes in jQuery

<a href="javascript:(void);" id="lnkP">show all children</a>
<a href="javascript:(void);" id="lnkC1">hide child 1</a>
<a href="javascript:(void);" id="lnkC2">hide child 2</a>

<div id="p" style="display:none;">
<div id="c1">child 1</div>
<div id="c2">child 1</div>...
</div>​

$("#lnkP").click(function(){
    $("#p").children().show(); //seems there's a problem here...
});
$("#lnkC1").click(function(){
   $("#c1").hide(); 
});
$("#lnkC2").click(function(){
   $("#c2").hide(); 
});​

jsFiddle: http://jsfiddle.net/CBGsF/1/

What I am trying to do is:

  1. p is a parent container
  2. click show all children link, display all child divs under p
  3. click lnkC1 or lnkC2 to hide individual child div

But it seems that I didn't get .children() working correctly. So how to fix it? Any ideas?

like image 470
woodykiddy Avatar asked Dec 07 '12 04:12

woodykiddy


People also ask

Is visible function in jQuery?

The :visible selector in jQuery is used to select every element which is currently visible. It works upon the visible elements. The elements that are consuming space in the document are considered visible elements. The height and width of visible elements are larger than 0.

What is nth child in jQuery?

jQuery :nth-child() Selector Selects all elements that are the nth-child of their parent. Syntax: $("Element:nth-child(Index/even/odd/equation)") Values: Index: Index provided. Index starts from.

What is parent and child in jQuery?

The ("parent > child") selector selects all elements that are a direct child of the specified element.

How to get all child element in jQuery?

children() is an inbuilt method in jQuery which is used to find all the children element related to that selected element. This children() method in jQuery traverse down to a single level of the selected element and return all elements.


1 Answers

Since the parent (#p in your case) has a display:none, it's children won't be visible.

You'll need to show the parent first,

$("#p")
.show()
.children().show();

(jQuery's chaining, very helpful)

Please try and get rid of the inline styling (it gets unmanageable after a while), use classes as much as possible.

You can have a class in css,

.displayNone
{
    display: none;
} 
.displayBlock
{
   display: block;
}

And then use jquery methods .removeClass(), .addClass() or .toggleClass() to show/hide your elements.

This is just a recommendation :)

Test link: http://jsfiddle.net/CBGsF/8/

like image 137
painotpi Avatar answered Oct 05 '22 02:10

painotpi