11488 sujets

JavaScript, DOM et API Web HTML5

Pages :
a écrit :
une fonction (...) qui met le nom des balises en minuscules.


ben pour le coup, l'objectif est plutôt obscur...
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 Smiley lol
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;
erreur de manip pouvez vous supprimer ce post merci... Encore désolé...
Modifié par MySharrascript (31 Oct 2007 - 11:10)
a écrit :

Je ne vois toujours pas ce que tu veux dire! par définition, une chaîne propre ne peut contenir du html;

Ben...
var chaine = "<div id=\"test\"><p>Hello world !</p></div>";
... et inerHTML...
c'est quoi alors ?
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 Smiley confus ) 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 ... Smiley lol ) 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 ! Smiley biggol [/i]
Modifié par kzone (31 Oct 2007 - 12:03)
a écrit :
matmat a écrit :
en plus tout les noeuds textes disparaissent!

?

Bé en fait comme un noeud texte peut contenir du html à mettre en minuscule, if ne suffit pas il faut tous les passer en revue avec switch, les noeud balises et les noeud text.
pour la 2 avec innerHTML voilà une idée :

n = inner.split('<');
for (I=0; I<n.length; I++){
y = n[I].split('>')[0].split('"')[0].toLowerCase();
}


edit : j'ai enlever les attribut...
Modifié par matmat (31 Oct 2007 - 16:35)
Bijour,
pour la 4 (pas testé) :

window.location.search.substring(1).split('&').forEach(function(x) { this[x.split('=')[0]] = x.split('=')[1]; });


forEach, oui je sais et alors Smiley cligne
qu'avec js 1.5, sans boucle et en une ligne, vais réfléchir...
Ze Nenex a écrit :
forEach, oui je sais et alors Smiley cligne
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) :

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 Smiley sweatdrop

*(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)
Ze Nenex > J'ai des doutes sur la validité de la regexp mais sinon la deuxième semble correcte.
Un petit coup de correction et tu as gagné.
QuentinC : après un petit test il semble qu'elle soit correcte

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)
Le (.)*? me paraissait un peu bizarre, je me demandais si c'était équivalent à (.*?)

Mais un truc m'intrigue, s'il y a des arguments, tu captures tout, non ?

Plus besoin de chercher pour le 3... je n'ai pas pensé à map
Tu as un nouveau défi à proposer Ze Nenex ?
QuentinC a écrit :
Le (.)*? me paraissait un peu bizarre
C'est ce qu'on appelle une capture non gourmande.

QuentinC a écrit :
Mais un truc m'intrigue, s'il y a des arguments, tu captures tout, non ?
Exact, dans ce cas ce pattern: /<\/?([a-z_-]+)/ig est surement plus adapté.

QuentinC a écrit :
Tu as un nouveau défi à proposer Ze Nenex ?
heuuu Smiley rolleyes
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...
QuentinC a écrit :

Pour le 1 : Personne n'a encore repéré le petit truc à ajouter ?

function RbgToHex(r,g,b) {
	return "#"+[r,g,b].map(function(color) {
		return ((color<16)?"0":"") + color.toString(16);
	}).join("");
}

Modifié par Shinuza (02 Nov 2007 - 07:03)
Pages :