Bonsoir,
à nouveau une particularité ie/fx.
Voici un bout de code qui permet de stocker des messages et de n'afficher que ceux d'un type donné :
Le résultat est bien celui attendu, sauf qu'à l'affichage ie rajoute une ligne filter > undefined : undefined !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Untitled Page</title> </head> <body> <script type="text/javascript"> gFileMessages = []; //file : table (plus ancien message en premier) function ajouteMessage(txtMsg, criticiteMsg) { Msg = { texte: txtMsg, criticite: criticiteMsg }; gFileMessages.push(Msg); } // Ajout de la compatibilité à .filter() pour ie //This prototype is provided by the Mozilla foundation and //is distributed under the MIT license. //http://www.ibiblio.org/pub/Linux/LICENSES/mit.license if (!Array.prototype.filter) { Array.prototype.filter = function(fun /*, thisp*/) { var len = this.length; if (typeof fun != "function") throw new TypeError(); var res = new Array(); var thisp = arguments[1]; for (var i = 0; i < len; i++) { if (i in this) { var val = this[i]; // in case fun mutates this if (fun.call(thisp, val, i, this)) res.push(val); } } return res; }; } function estInfo(Msg) { return (Msg.criticite == 'info'); } function estAvert(Msg) { return (Msg.criticite == 'avert'); } function extraitMessages(criticiteMsg) { var fileMessagesSortis = []; switch (criticiteMsg) { case 'info': fileMessagesSortis = gFileMessages.filter(estInfo); break; case 'avert': fileMessagesSortis = gFileMessages.filter(estAvert); break; default: fileMessagesSortis = null; break; } return fileMessagesSortis; } function test() { document.getElementById('div_sortie').innerHTML = '<br>'; ajouteMessage('message 1', 'info'); ajouteMessage('message 2', 'avert'); ajouteMessage('message 3', 'info'); document.getElementById('div_sortie').innerHTML += '* gFileMessages :<br>'; for (i in gFileMessages) { document.getElementById('div_sortie').innerHTML += i + ' > '; document.getElementById('div_sortie').innerHTML += gFileMessages[i].texte; document.getElementById('div_sortie').innerHTML += ' : '; document.getElementById('div_sortie').innerHTML += gFileMessages[i].criticite; document.getElementById('div_sortie').innerHTML += '<br>'; } document.getElementById('div_sortie').innerHTML += gFileMessages.length + ' éléments <br>'; // --- var tabInfo = []; tabInfo = extraitMessages('info'); document.getElementById('div_sortie').innerHTML += '* tabInfo (extraction des Info) :<br>'; for (i in tabInfo) { document.getElementById('div_sortie').innerHTML += i + ' > '; document.getElementById('div_sortie').innerHTML += tabInfo[i].texte; document.getElementById('div_sortie').innerHTML += ' : '; document.getElementById('div_sortie').innerHTML += tabInfo[i].criticite; document.getElementById('div_sortie').innerHTML += '<br>'; } document.getElementById('div_sortie').innerHTML += tabInfo.length + ' éléments <br>'; } </script> <a href="#" onclick="test();">+++ TEST +++</a> <div id="div_sortie"> </div> </body> </html>
Résulat Firefox 3 :
Résultat ie 6 :+++ TEST +++
* gFileMessages :
0 > message 1 : info
1 > message 2 : avert
2 > message 3 : info
3 éléments
* tabInfo (extraction des Info) :
0 > message 1 : info
1 > message 3 : info
2 éléments
Est-ce que j'ai fais une bétise à l'affichage ou y a-t-il un réel problème ?+++ TEST +++
* gFileMessages :
filter > undefined : undefined
0 > message 1 : info
1 > message 2 : avert
2 > message 3 : info
3 éléments
* tabInfo (extraction des Info) :
filter > undefined : undefined
0 > message 1 : info
1 > message 3 : info
2 éléments
PS : le code de compatibilité .filter() pour ie est fourni par Mozilla, je n'y ai pas touché et j'avoue que je ne le comprends pas.![]()
Partager