class wijzigen mbv javascript
<style type="text/css">
body{
font-family: Arial, Helvetica, sans-serif;
}
.deselected{
width:200px;
height:200px;
display:block;
border:1px solid black;
background-color:#09F;
color:#FFF;
float:left;
margin-right:10px;
}
.selected{
width:200px;
height:200px;
display:block;
border:1px solid black;
background-color:#FFF;
color:#000;
float:left;
margin-right:10px;
}
p{
margin:10px;
font-size:20px;
}
</style>
<script type="text/javascript">
var Lst;
function CngClass(obj){
if (Lst) Lst.className='deselected';
obj.className='selected';
Lst=obj;
}
</script>
</head>
<body>
<div class="selected" onclick="CngClass(this);"><p>vak 1</p></div>
<div class="deselected" onclick="CngClass(this);"><p>vak 2</p></div>
<div class="deselected" onclick="CngClass(this);"><p>vak 3</p></div>
<div class="deselected" onclick="CngClass(this);"><p>vak 4</p></div>
</body>
</html>
Zodra iemand klikt op een ander vak pas je mbv javascript alleen dat vak aan, daar gaat het "fout".
EDIT: blijkbaar geeft document.getElementsByClassName problemen met IE < 9.
Intussen aangepast, met een custom getElementsByClassName
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
...
<script type="text/javascript">
function CngClass(obj) {
var vakken = getElementsByClassName('vak'); // wegens IE > 9 ... geen documents.getElementsByClassName, maar een custom functie
for(var i=0; i<vakken.length; i++) {
if(vakken[i] == obj) {
// het geklikte object
if(hasClass(obj, 'deselected')) {
removeClass(obj, 'deselected');
}
if(!hasClass(obj, 'selected')) {
addClass(obj, 'selected');
}
}
else {
// al de rest
if(hasClass(vakken[i], 'selected')) {
removeClass(vakken[i], 'selected');
}
if(!hasClass(vakken[i], 'deselected')) {
addClass(vakken[i], 'deselected');
}
}
}
}
/**
* IE < 9 kent document.getElementsByClassName blijkbaar niet. Dan maar een custom functie
* @see http://stackoverflow.com/questions/4404154/getelementsbyclassname-ie-resolution-issue
*/
function getElementsByClassName(findClass, parent) {
parent = parent || document;
var elements = parent.getElementsByTagName('*');
var matching = [];
for(var i = 0, elementsLength = elements.length; i < elementsLength; i++){
if ((' ' + elements[i].className + ' ').indexOf(findClass) > -1) {
matching.push(elements[i]);
}
}
return matching;
}
/**
* @see http://www.avoid.org/?p=78
*/
function hasClass(el, name) {
return new RegExp('(\\s|^)'+name+'(\\s|$)').test(el.className);
}
function addClass(el, name) {
if (!hasClass(el, name)) { el.className += (el.className ? ' ' : '') +name; }
}
function removeClass(el, name) {
if (hasClass(el, name)) {
el.className=el.className.replace(new RegExp('(\\s|^)'+name+'(\\s|$)'),' ').replace(/^\s+|\s+$/g, '');
}
}
</script>
</head>
<body>
<div class="vak selected" onclick="CngClass(this);"><p>vak 1</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 2</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 3</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 4</p></div>
</body>
</html>
<script type="text/javascript">
function CngClass(obj) {
var vakken = getElementsByClassName('vak'); // wegens IE > 9 ... geen documents.getElementsByClassName, maar een custom functie
for(var i=0; i<vakken.length; i++) {
if(vakken[i] == obj) {
// het geklikte object
if(hasClass(obj, 'deselected')) {
removeClass(obj, 'deselected');
}
if(!hasClass(obj, 'selected')) {
addClass(obj, 'selected');
}
}
else {
// al de rest
if(hasClass(vakken[i], 'selected')) {
removeClass(vakken[i], 'selected');
}
if(!hasClass(vakken[i], 'deselected')) {
addClass(vakken[i], 'deselected');
}
}
}
}
/**
* IE < 9 kent document.getElementsByClassName blijkbaar niet. Dan maar een custom functie
* @see http://stackoverflow.com/questions/4404154/getelementsbyclassname-ie-resolution-issue
*/
function getElementsByClassName(findClass, parent) {
parent = parent || document;
var elements = parent.getElementsByTagName('*');
var matching = [];
for(var i = 0, elementsLength = elements.length; i < elementsLength; i++){
if ((' ' + elements[i].className + ' ').indexOf(findClass) > -1) {
matching.push(elements[i]);
}
}
return matching;
}
/**
* @see http://www.avoid.org/?p=78
*/
function hasClass(el, name) {
return new RegExp('(\\s|^)'+name+'(\\s|$)').test(el.className);
}
function addClass(el, name) {
if (!hasClass(el, name)) { el.className += (el.className ? ' ' : '') +name; }
}
function removeClass(el, name) {
if (hasClass(el, name)) {
el.className=el.className.replace(new RegExp('(\\s|^)'+name+'(\\s|$)'),' ').replace(/^\s+|\s+$/g, '');
}
}
</script>
</head>
<body>
<div class="vak selected" onclick="CngClass(this);"><p>vak 1</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 2</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 3</p></div>
<div class="vak deselected" onclick="CngClass(this);"><p>vak 4</p></div>
</body>
</html>
---
Je kan eventueel de gemeenschappelijke css verhuizen naar
.vak {}
Het lijkt me stabieler als enkel de kleuren veranderen en de grootte en positionering niet wordt aangepast
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.deselected {
color:#FFF;
background-color:#09F;
}
.selected {
color:#000;
background-color:#FFF;
}
.vak {
width:200px;
height:200px;
display:block;
border:1px solid black;
float:left;
margin-right:10px;
}
color:#FFF;
background-color:#09F;
}
.selected {
color:#000;
background-color:#FFF;
}
.vak {
width:200px;
height:200px;
display:block;
border:1px solid black;
float:left;
margin-right:10px;
}
Gewijzigd op 03/10/2012 17:54:08 door Kris Peeters
Het werkt! Bedankt. Ik ben nog niet zo thuis in javascript dus het is even uitvogelen hoe e.e.a. precies werkt. Het bovenste deel begrijp ik maar waarom is het 2e deel (vanaf /** IE <9 ....) nog nodig? In Chrome werkt het ook niet zonder het tweede deel.
document.getElementsByClassName
IE < 9 kent die functie niet, waardoor ik dus een custom getElementsByClassName moest zoeken.
Met Chrome kan je dus (de aanroep van) die custom functie vervangen door document.getElementsByClassName