Hello,
I’m new to JS and am looking for guidance. I am trying to write a script that that will allow me to post a list of topics (list of <div>’s) and then when the topic (<div>is clicked text is posted under that topic. When the topic is clicked again the text is hidden.
I found that a toggle() function works well for this, and I’ve been able to make it work with only one <div> using getElementById(). My question, how can I configure the script so that I can create a list of topics.
Example:
Item1 Item1
Item2 —clicking on Item2 Item2
Item3 Item 2 information here
Item3
Here is the code I’m using:
function toggle() {
var ele = document.getElementById(“toggleText”);
var text = document.getElementById(“displayText”);
if(ele.style.display == “block”) {
ele.style.display = “none”;
//text.innerHTML = “show”;
}
else {
ele.style.display = “block”;
//text.innerHTML = “hide”;
}
}
<a id=”dispayText” href=”javascript:toggle();”>Item 1</a>
<div id=”toggleText” style=”display: none”>Info on item 1
<P>
<a id=”dispayText” href=”javascript:toggle();”>Item 2</a>
<div id=”toggleText” style=”display: none”>Info on item 2</div>
<P>
<a id=”displayText” href=”javascript:toggle();”>Item 3</a>
<div id=”toggleText” style=”display: none”>Info on item 3</div>
I know that I need to change the id’s for each item.
Any guidance would be greatly appreciated.
Cheers,
John
<i>
</i><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title> HTML5 page </title>
<style type="text/css">
.show { display:block; }
.hide { display:none; }
</style>
</head>
<body>
<a href="#" onclick="return toggle('toggleText0')">Item 1</a>
<div id="toggleText0" class="hide">Info on item 1</div>
<p>
<a href="#" onclick="return toggle('toggleText1')">Item 2</a>
<div id="toggleText1" class="hide">Info on item 2</div>
<p>
<a href="#" onclick="return toggle('toggleText2')">Item 3</a>
<div id="toggleText2" class="hide">Info on item 3</div>
<script type="text/javascript">
function toggle(info) {
var elem = document.getElementById(info);
if (elem.className == "hide") { elem.className = 'show'; } else { elem.className = 'hide'; }
return false;
}
</script>
</body>
</html>
[CODE]<a class="displayText">Item 1</a><br>
<div style="display: none">Info on item 1</div>
<a class="displayText">Item 2</a><br>
<div id="toggleText" style="display: none">Info on item 2</div>[/CODE]
[CODE]function toggle(){
var v;
v = this.nextSibling;
while(v.nodeType !== 1){
v = v.nextSibling;
}
if(v.style.display != 'none'){
v.style.display = 'none';
}
else{
v.style.display = "";
}
}[/CODE]
[CODE] var len, a = document.getElementsByClassName('displayText');
len = a.length;
while(len--){
a[len].onclick = toggle;
}[/CODE]
[color=navy]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS toggling</title>
<style media="screen">
body {
background-color:#f0f0f0;
font-size:100%;
}
#container {
width:40%;
padding:0.4%;
border:0.1em solid #999;
border-radius:1.2em 1.2em 0 0;
margin:auto;
color:#333;
background-color:#fff;
box-shadow:0.3em 0.3em 0.3em #666;
}
input {
display:none;
}
input + label:before{
content:'&#9660; show';
}
input:checked + label:before {
content:'&#9650; hide';
}
input ~ div { <br/>
height:0;
border-right:0.1em solid #999;
border-left:0.1em solid #999;
border-top:0;
overflow:hidden;
font-size:90%;
box-shadow:inset 0 0 0.5em #999;
background-color:#fcfcfc;
}
input:checked ~ div {
padding:0 5%;
overflow:auto;
-webkit-animation:2s open forwards; <br/>
animation:2s open forwards;
}
label {
display:block;
line-height:2;
padding:0 3%;
color:#fff;
background-color:#333;
background-image:linear-gradient(to bottom,#ddd,#222);
text-shadow:0 0 1px #000, 0 0 2px #000, 0 0 3px #000;
cursor:pointer;
}
input:checked ~ label {
background-image:linear-gradient(to bottom,#ddf,#226);
}
#container div:first-of-type label{
border-radius:1em 1em 0 0;
}
#container div:last-of-type div{
border-bottom:0.1em solid #999;
}
@-webkit-keyframes open {
from {
height:0;
}
to {
height:190px;
}
}
@keyframes open {
from {
height:0;
}
to {
height:190px;
}
}
</style>
</head>
<body>
<div id="container">
<div>
<input id="cb" type="checkbox">
<label for="cb"></label>
<div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec
ultricies sollicitudin nisi, ut molestie felis adipiscing sit
amet. Sed auctor vehicula commodo. Nam a nibh neque, vitae
faucibus felis. Vivamus at metus eget eros consequat fringilla.
Quisque magna magna, laoreet eu tempus sit amet, fringilla at
tellus. Praesent felis tortor, scelerisque vitae fringilla
non, porttitor et lacus. Ut ut sapien nec quam tincidunt
consectetur in nec lacus.
</p>
</div>
</div><div>
<input id="cb1" type="checkbox">
<label for="cb1"></label>
<div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec
ultricies sollicitudin nisi, ut molestie felis adipiscing sit
amet. Sed auctor vehicula commodo. Nam a nibh neque, vitae
faucibus felis. Vivamus at metus eget eros consequat fringilla.
Quisque magna magna, laoreet eu tempus sit amet, fringilla at
tellus. Praesent felis tortor, scelerisque vitae fringilla
non, porttitor et lacus. Ut ut sapien nec quam tincidunt
consectetur in nec lacus.
</p><p>
Phasellus porta, dui a elementum egestas, odio sapien rhoncus
lorem, vitae bibendum erat sem eget sapien. Maecenas ut metus
ac quam pellentesque lacinia quis sit amet augue. Fusce eu
euismod urna. Nunc volutpat scelerisque tempus. Donec eget arcu
et mauris scelerisque tristique. Donec fringilla mauris dolor,
sit amet vulputate lacus. Nulla feugiat mattis nulla non
tincidunt. Nam sit amet dolor eros, a viverra lacus. Nunc quis
nisi eget neque tempus facilisis eu quis sapien.
</p>
</div>
</div><div>
<input id="cb2" type="checkbox">
<label for="cb2"></label>
<div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec
ultricies sollicitudin nisi, ut molestie felis adipiscing sit
amet. Sed auctor vehicula commodo. Nam a nibh neque, vitae
faucibus felis. Vivamus at metus eget eros consequat fringilla.
Quisque magna magna, laoreet eu tempus sit amet, fringilla at
tellus. Praesent felis tortor, scelerisque vitae fringilla
non, porttitor et lacus. Ut ut sapien nec quam tincidunt
consectetur in nec lacus.
</p>
</div>
</div>
</div>
</body>
</html>[/color]
[color=navy]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascript toggle</title>
<style media="screen">
body {
background-color:#f0f0f0;
font-size:100%;
}
#container {
width:50%;
padding:0.4%;
border:0.1em solid #999;
border-radius:1.2em 1.2em 0 0;
margin:auto;
color:#333;
background-color:#fff;
box-shadow:0.3em 0.3em 0.3em #666;
}
#container span {
display:block;
line-height:2.0;
background-image:linear-gradient(to bottom,#ccc,#333);
color:#fff;
text-indent:2%;
text-shadow:0 0 1px #000,0 0 3px #000,0 0 3px #000;
}
#container span:first-of-type {
border-radius:1em 1em 0 0;
}
#container span:hover {
background-image:linear-gradient(to bottom,#ddf,#226);
}
#container div {
padding:2% 5%;
border:1px solid #000;
box-shadow:inset 0 0 0.5em #999;
background-color:#fcfcfc;
}
.hide {
display:none;
}
</style>
<script>
(function() {
'use strict';
var cn,sp,dv,c,el,n;
function init(){
cn=document.getElementById('container');
sp=cn.getElementsByTagName('span');
dv=cn.getElementsByTagName('div');
for(c=0;c<sp.length;c++) {
sp[c].number=c;
sp[c].addEventListener('onclick',makeClickHandler(c));
}
}
function makeClickHandler(c) {
sp[c].onclick=function() {
el=this;
n=this.number
toggleStuff(el,n);
};
}
function toggleStuff(el,n) {
if(el.firstChild.nodeValue==='&#9650; hide content') {
el.firstChild.nodeValue='&#9660; show content';
dv[n].className='hide';
}
else {
for(c=0;c<sp.length;c++) {
sp[c].firstChild.nodeValue='&#9660; show content';
dv[c].className='hide';
}
el.firstChild.nodeValue='&#9650; hide content';
dv[n].className='';
}
}
window.addEventListener('load',init,false);
})();
</script>
</head>
<body>
<div id="container">
<span>&#9660; show content</span>
<div class="hide">content</div>
<span>&#9660; show content</span>
<div class="hide">content</div>
<span>&#9660; show content</span>
<div class="hide">content</div>
<span>&#9660; show content</span>
<div class="hide">content</div>
<span>&#9660; show content</span>
<div class="hide">content</div>
<span>&#9660; show content</span>
<div class="hide">content</div>
</div>
</body>
</html>[/color]
[code=html]<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Toggle Text</title>
<style>
a.show {
color: #339966;
}
</style>
<script>
function toggle(ele,text) {
if(text.style.display == "block") {
text.style.display = "none";
ele.innerHTML = "Show";
}
else {
text.style.display = "block";
ele.innerHTML = "Hide";
}
}
</script>
</head>
<body>
<a class="show" id="displayText1" href="javascript:toggle(displayText1,toggleText1);">Show more ...</a>
<div id="toggleText1" style="display: none;">
More text 1
</div>
<br>
<a class="show" id="displayText2" href="javascript:toggle(displayText2,toggleText2);">Show more ...</a>
<div id="toggleText2" style="display: none;">
More text 2
</div>
<br>
<a class="show" id="displayText3" href="javascript:toggle(displayText3,toggleText3);">Show more ...</a>
<div id="toggleText3" style="display: none;">
More text 3
</div>
<br>
<a class="show" id="displayText4" href="javascript:toggle(displayText4,toggleText4);">Show more ...</a>
<div id="toggleText4" style="display: none;">
More text 4
</div>
</body>
</html>[/code]
[color=navy]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>javascript toggle</title>
<style media="screen">
body {
background-color:#f0f0f0;
font-size:100%;
}
#container {
width:50%;
padding:0.4%;
border:0.1em solid #999;
border-radius:1.2em 1.2em 0 0;
margin:auto;
color:#333;
background-color:#fff;
box-shadow:0.3em 0.3em 0.3em #666;
}
#container span {
display:block;
height:2em;
line-height:2.0;
background-image:linear-gradient(to bottom,#ccc,#333);
color:#fff;
text-indent:2%;
text-shadow:0 0 1px #000,0 0 3px #000,0 0 3px #000;
cursor:pointer;
}
#container span:first-of-type {
border-radius:1em 1em 0 0;
}
#container span:hover {
background-image:linear-gradient(to bottom,#ddf,#226);
}
#container div {
padding:2% 5%;
border:1px solid #000;
box-shadow:inset 0 0 0.5em #999;
background-color:#fcfcfc;
}
.hide {
display:none;
}
</style>
<script>
(function() {
'use strict';
var cn,sp,dv,c,el,n;
function init(){
cn=document.getElementById('container');
sp=cn.getElementsByTagName('span');
dv=cn.getElementsByTagName('div');
for(c=0;c<sp.length;c++) {
dv[c].className='hide';
sp[c].number=c;
sp[c].innerHTML='&#9660; show content';
sp[c].addEventListener('onclick',makeClickHandler(c));
}
}
function makeClickHandler(c) {
sp[c].onclick=function() {
el=this;
n=this.number
toggleStuff(el,n);
};
}
function toggleStuff(el,n) {
if(el.innerHTML==='&#9650; hide content') {
el.innerHTML='&#9660; show content';
dv[n].className='hide';
}
else {
for(c=0;c<sp.length;c++) {
sp[c].innerHTML='&#9660; show content';
dv[c].className='hide';
}
el.innerHTML='&#9650; hide content';
dv[n].className='';
}
}
window.addEventListener('load',init,false);
})();
</script>
</head>
<body>
<div id="container">
<span></span>
<div>content</div>
<span></span>
<div>content</div>
<span></span>
<div>content</div>
<span></span>
<div>content</div>
<span></span>
<div>content</div>
<span></span>
<div>content</div>
</div>
</body>
</html>[/color]
0.1.9 — BETA 5.19