When you have an element node, you can select another element in relation to it using these five properties (grouped in 3 categories in relation). This is known as traversing t he DOM.
parentNode
to get the container element.previousSibling
, nextSibling
to get previous or next element of according to the current element.firstChild
, lastChild
to get the first or last element inside the container of elements.Traversing the DOM can be difficult because some browsers add a text node whenever they come across whitespace between elements.
Let us see the same example about HTML and CSS
HTML
<ul>
<li id="one" class="hot"><em>fresh</em> figs</li>
<li id="two" class="hot">pine nuts</li>
<li id="three" class="hot">honey</li>
<li id="four">balsamic vinegar</li>
</ul>
CSS
@import url(http://fonts.googleapis.com/css?family=Oswald);
body {
background-color: #000;
font-family: "Oswald", "Futura", sans-serif;
margin: 0px;
padding: 0px;
}
#page {
background-color: #403c3b;
margin: 0px auto 0px auto;
}
/* Responsive page rules at bottom of style sheet */
h1 {
background-image: url(../images/kinglogo.png);
background-repeat: no-repeat;
background-position: center center;
text-align: center;
text-indent: -1000%;
height: 75px;
line-height: 75px;
width: 117px;
margin: 0px auto 0px auto;
padding: 30px 10px 20px 10px;
}
h2 {
color: #fff;
font-size: 24px;
font-weight: normal;
text-align: center;
text-transform: uppercase;
letter-spacing: 0.2em;
margin: 0px 0px 23px 0px;
}
h2 span {
border-radius: 50%;
background-color: #000;
font-size: 10px;
text-align: center;
display: inline-block;
position: relative;
top: -5px;
height: 18px;
width: 20px;
margin-left: 5px;
padding: 4px 0px 0px 4px;
}
ul {
background-color: #584f4d;
border: none;
padding: 0px;
margin: 0px;
}
li {
background-color: #ec8b68;
color: #fff;
border-top: 1px solid #fe9772;
border-bottom: 1px solid #9f593f;
font-size: 24px;
letter-spacing: 0.05em;
list-style-type: none;
text-shadow: 2px 2px 1px #9f593f;
height: 50px;
padding-left: 1em;
padding-top: 10px;
}
.hot {
background-color: #d7666b;
color: #fff;
text-shadow: 2px 2px 1px #914141;
border-top: 1px solid #e99295;
border-bottom: 1px solid #914141;
}
.cool {
background-color: #6cc0ac;
color: #fff;
text-shadow: 2px 2px 1px #3b6a5e;
border-top: 1px solid #7ee0c9;
border-bottom: 1px solid #3b6a5e;
}
.complete {
background-color: #999;
color: #fff;
background-image: url("../images/icon-trash.png");
background-position: center right;
background-repeat: no-repeat;
text-shadow: 2px 2px 1px #ccc;
border-top: 1px solid #666;
text-shadow: 2px 2px 1px #333;
}
li a {
color: #fff;
text-decoration: none;
background-image: url("../images/icon-link.png");
background-position: center right;
background-repeat: no-repeat;
padding-right: 36px;
}
p {
color: #403c3b;
background-color: #fff;
border-radius: 5px;
text-align: center;
padding: 10px;
margin: 20px auto 20px auto;
min-width: 20%;
max-width: 80%;
}
#scriptResults {
padding-bottom: 10px;
}
/* Small screen - acts like the app would */
@media only screen and (max-width: 500px) {
body {
background-color: #584f4d;
}
#page {
max-width: 480px;
}
}
@media only screen and (min-width: 501px) and (max-width: 767px) {
#page {
max-width: 480px;
margin: 20px auto 20px auto;
}
}
@media only screen and (min-width: 768px) and (max-width: 959px) {
#page {
max-width: 480px;
margin: 20px auto 20px auto;
}
}
/* Larger screens act like a demo for the app */
@media only screen and (min-width: 960px) {
#page {
max-width: 480px;
margin: 20px auto 20px auto;
}
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
h1 {
background-image: url(../images/2xkinglogo.png);
background-size: 72px 72px;
}
}
Let us see example found in example found in Chapter_05/Examples/c05/node-list.html
JavaScript
// Select the starting point and find its siblings.
var startItem = document.getElementById("two");
var prevItem = startItem.previousSibling;
var nextItem = startItem.nextSibling;
// Change the values of the siblings' class attributes.
prevItem.className = "complete";
nextItem.className = "cool";
JavaScript
// Select the starting point and find its siblings.
var startItem = document.getElementById("two");
var prevItem = startItem.previousSibling;
var nextItem = startItem.nextSibling;
// Change the values of the siblings' class attributes.
prevItem.className = "complete";
nextItem.className = "cool";