11528 sujets
JavaScript, DOM et API Web HTML5
Shinuza a écrit :
nodeName est un getter, ça ne fonctionnera pas
Le problème est surtout que toLowerCase ne modifie pas l'objet auquel elle s'applique (comme toutes les méthodes de String d'ailleurs).
matmat a écrit :
en plus tout les noeuds textes disparaissent!
?
Javatwister a écrit :
ben pour le coup, l'objectif est plutôt obscur...
+1
Modifié par Julien Royer (31 Oct 2007 - 08:52)
a écrit :
moins élegant c'est dur, mais que ce soit classé "facile" c'est déprimant...
C'est toujours difficile de juger facile, moyen ou difficile : c'est assez subjectif. Quelque chose que je considérerai facile ne le sera pas pour certains, et inversément...
Mais voyant ce que vous proposez pour le 2 et le 3, je crois qu'il faut que je précise un peu : Il ne s'agit pas de manipuler le DOM mais une chaîne contenant du HTML... ou autrement dit, typiquement, innerHTML.
C'est tout de suite plus facile, non ?
Pour le 1, je vais vous aider un peu aussi : essayez vos fonctions avec par exemple R=0, G=1 et B=2 et admirez le résultat.
Pour le 4, c'est pas mal, je drais même qu'il est en train de gagnner.
Julien Royer a écrit :
Le problème est surtout que toLowerCase ne modifie pas l'objet auquel elle s'applique (comme toutes les méthodes de String d'ailleurs).
?
+1
Oui, il renvoit une copie de l'objet avec les modifications appliquées, mais parti du principe qu'un getter ne peut pas être modifié (ça lève une erreur) il va pas aller loin
a écrit :
voyant ce que vous proposez pour le 2 et le 3, je crois qu'il faut que je précise un peu : Il ne s'agit pas de manipuler le DOM mais une chaîne contenant du HTML... ou autrement dit, typiquement, innerHTML.
C'est tout de suite plus facile, non ?
Je ne vois toujours pas ce que tu veux dire! par définition, une chaîne propre ne peut contenir du html;
shinuza a écrit :
Oui, il renvoit une copie de l'objet avec les modifications appliquées, mais parti du principe qu'un getter ne peut pas être modifié (ça lève une erreur) il va pas aller loin lol
C'est le pourquoi (du comment ) de la différence entre ( ehh en français ) :
function NomNode(n){
if(n.nodeType == 1){
alert(n.nodeName.toLowerCase()); // avec Lowercase retourne
// minuscule
// Sans me retourne des majuscules
var enf = n.childNodes;
for(var i = 0; i <enf.length;i++)
NomNode(enf[i]);
}
}
... faut que je revoie cela
Sinon concernant les noeud textes , ce qui compte (ou comptait après les "précisions" z'et floutages apportés au problèmes ... ) c'est la balise (element node) contenant le noeud texte ...
mais comme le dit si bien Quentin :
a écrit :
Il ne s'agit pas de manipuler le DOM mais une chaîne contenant du HTML... ou autrement dit, typiquement, innerHTML.
... bon je recommence ... cette nuit ! [/i]
Modifié par kzone (31 Oct 2007 - 12:03)
Ze Nenex a écrit :
forEach, oui je sais et alors
qu'avec js 1.5, sans boucle et en une ligne, vais réfléchir...
Je n'ai jamais dit qu'il ne fallait pas utiliser forEach. Ma solution n'en utilise pas mais la tienne est plus courte que la mienne.
Pour le moment il y a à peu près ex aequo pour le n°4... les deux propositions sont meilleures que la mienne.
matmat > Pour la 2, IL y a beaucoup plus court et surtout, comme tu le dis si bien, tu as viré les attributs. Donc pas bon.
Pour le 1 : Personne n'a encore repéré le petit truc à ajouter ?
Tiens, pour la 2 (vaut pour la 3 aussi je crois) :
*Edit: ça répond correctement à l'énoncé ? parce qu'en fait j'ai pas bien suivi
*(re)Edit
Modifié par Ze Nenex (01 Nov 2007 - 02:26)
function Html2Lower() {
document.body.innerHTML = document.body.innerHTML.toLowerCase();
}
En mettant de côté l'intérêt d'une telle fonction, bien sur.*Edit: ça répond correctement à l'énoncé ? parce qu'en fait j'ai pas bien suivi
*(re)Edit
function Html2Lower() {
document.body.innerHTML =
document.body.innerHTML.replace(/<(.)*?>/g, function(x) { return x.toLowerCase(); });
}
huh? Modifié par Ze Nenex (01 Nov 2007 - 02:26)
QuentinC : après un petit test il semble qu'elle soit correcte
Pour la 3 :
Modifié par Ze Nenex (01 Nov 2007 - 11:52)
alert("<DiV iD='ok'><SpAN ClASS='no'>contenu</sPAn></DIv>".replace(/<(.)*?>/g, function(x) { return x.toLowerCase(); }));
Pour la 3 :
function Html2LowerNoReg {
document.body.innerHTML =
document.body.innerHTML.split("<").map(function(x) { return x.substring(0, x.indexOf(">")).toLowerCase() + x.substring(x.indexOf(">")); }).join("<");
}
Modifié par Ze Nenex (01 Nov 2007 - 11:52)
QuentinC a écrit :C'est ce qu'on appelle une capture non gourmande.
Le (.)*? me paraissait un peu bizarre
QuentinC a écrit :Exact, dans ce cas ce pattern: /<\/?([a-z_-]+)/ig est surement plus adapté.
Mais un truc m'intrigue, s'il y a des arguments, tu captures tout, non ?
QuentinC a écrit :heuuu
Tu as un nouveau défi à proposer Ze Nenex ?
a écrit :
C'est ce qu'on appelle une capture non gourmande.
Oui non ça d'accord mais pourqoi (.)*? et non pas (.*?)...
a écrit :
Exact, dans ce cas ce pattern: /<\/?([a-z_-]+)/ig est surement plus adapté.
C'est à ce genre de pattern que je m'attendais.
On peut faire légèrement autrement avec /<\/?\w+/ig mais tu as également gagné ce n°2.
Donc je rectifie : tu peux potentiellement proposer deux nouveaux défis.
Si tu n'as pas d'idée, j'essaierai d'en trouver un autre, ou bien quelqu'un le fera pour nous...