<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Retour à La Source • Tag: DOM • RSS</title>
		<link>http://www.ab-d.fr/tag/DOM/</link>
		<description>Retour à La Source • Tag: DOM • RSS</description>
		<copyright>http://www.ab-d.fr/tag/DOM/ (c) 2010</copyright>
		<language>fr</language>
		<pubDate>Sat, 31 Jul 2010 14:50:55 +0100</pubDate>
		<generator>Retour à La Source • Tag: DOM • RSS • version 1.0</generator>
		<webMaster>noreply@ab-d.fr ( Benoit Asselin )</webMaster>
		<image>
			<url>http://www.ab-d.fr/images/rss.gif</url>
			<title>Retour à La Source • Tag: DOM • RSS</title>
			<link>http://www.ab-d.fr/tag/DOM/</link>
			<width>90</width>
			<height>30</height>
		</image>

		<item>
			<title>Combinaison de document.getElementById et RegExp ( javascript, dom )</title>
			<link>http://www.ab-d.fr/date/2008-12-14/</link>
			<pubDate>Sun, 14 Dec 2008 22:41:42 +0100</pubDate>
			<author>noreply@ab-d.fr ( Benoit Asselin )</author>
			<category><![CDATA[Javascript]]></category>
			<category><![CDATA[Regex]]></category>
			<category><![CDATA[DOM]]></category>
			<description><![CDATA[<p>
On sent que la récession en France est très forte, j'ai moi-même du mal à joindre les 2 bouts... notamment à propos du temps qui m'est disponible pour rédiger ce poste (<em>Travailler plus, pour gagner plus, qui disait !</em>).<br />
L'idée du code source du jour :</p>
<p>
Rechercher dans une page (X)HTML, les <code>ID</code>entifiants correspondant à une expression régulière <code>new RegExp</code>.
</p>

<pre>
function getElementsByRegExpId(p_regexp, p_element, p_tagName) {
	p_element = p_element === undefined ? document : p_element;
	p_tagName = p_tagName === undefined ? '*' : p_tagName;
	var v_return = [];
	var v_inc = 0;
	for(var v_i = 0, v_il = p_element.getElementsByTagName(p_tagName).length; v_i &lt; v_il; v_i++) {
		if(p_element.getElementsByTagName(p_tagName).item(v_i).id &amp;&amp; p_element.getElementsByTagName(p_tagName).item(v_i).id.match(p_regexp)) {
			v_return[v_inc] = p_element.getElementsByTagName(p_tagName).item(v_i);
			v_inc++;
		}
	}
	return v_return;
}

// Exemple d'utilisation
var v_array = getElementsByRegExpId(/^test.+/);

</pre>

<hr /><a href="http://res.feedsportal.com/viral/bookmark_fr.cfm?link=http%3A%2F%2Fwww.ab-d.fr%2Fdate%2F2008-12-14%2F&title=Combinaison+de+document.getElementById+et+RegExp+%28+javascript%2C+dom+%29"><img src="http://www.ab-d.fr/images/bookmark.gif" border="0" /></a><br /><br />]]></description>
			<comments>http://www.ab-d.fr/tag/DOM/</comments>
			<guid isPermaLink="false">http://www.ab-d.fr/date/2008-12-14/</guid>
		</item>

		<item>
			<title>Firefox 3 et input type=file Nouvelle Formule ! ( upload, path, nsIDOMFile )</title>
			<link>http://www.ab-d.fr/date/2008-07-12/</link>
			<pubDate>Sat, 12 Jul 2008 08:40:04 +0100</pubDate>
			<author>noreply@ab-d.fr ( Benoit Asselin )</author>
			<category><![CDATA[Firefox]]></category>
			<category><![CDATA[Javascript]]></category>
			<category><![CDATA[XHTML]]></category>
			<category><![CDATA[DOM]]></category>
			<description><![CDATA[<p>
De bon matin, je me lève, j'arrive sur une de mes applications en ligne, et là horreur ! cette dernière ne fonctionne plus sous Mozilla Firefox 3... Après analyse des petits messages d'erreurs, je me rends à l'évidence le formulaire <code>&lt;input type="file" /&gt;</code> ne se comporte plus de la même façon...
</p>

<p>
Les développeurs de Firefox 3 ont corrigé une petite faille de sécurité : Lorsque vous cliquez sur le bouton <strong>Parcourir</strong> le <code>value</code> de votre zone <code>input type="file"</code> contenait le nom du fichier ainsi que son chemin sur le disque dur, et bien aujourd'hui cela n'est plus, vous n'aurez plus que le nom du fichier.<br />
<em>D'ailleurs, Opera Browser se comporte aussi de la sorte, pour le moment Microsoft Internet Explorer et Apple Safari retournent toujours le chemin complet du fichier.</em>
</p>

<p>
Une très bonne nouvelle s'accompagne de ce petit changement, vous pouvez à présent accéder aux données du fichier sélectionné par l'utilisateur en Javascript sans poster le formulaire grâce à l'objet <code>FileList</code>. 
</p>

<p>
Un exemple vaut mieux qu'un long discours, voici une page qui vous permettra d'essayer cette nouvelle fonctionnalité (<em>qui je le rappelle, ne fonctionne que sur Mozilla Firefox 3</em>) :
</p>

<pre>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
	&lt;title&gt;input type=file &amp; Firefox 3&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
	
&lt;h1&gt;input type=file &amp; Firefox 3&lt;/h1&gt;
	
&lt;script type="text/javascript"&gt;
// &lt;![CDATA[

function inputFileOnChange() {
	var v_console = '';
	v_console += 'value: ' + document.getElementById('fichier').value;
	v_console += '&lt;br \/&gt;';
	
	if(document.getElementById('fichier')<strong>.files</strong>) {
		// Support: nsIDOMFile, nsIDOMFileList
		v_console += 'files.length: ' + document.getElementById('fichier')<strong>.files.length</strong>;
		v_console += '&lt;br \/&gt;';
		
		v_console += 'fileName: ' + document.getElementById('fichier')<strong>.files.item(0).fileName</strong>;
		v_console += '&lt;br \/&gt;';
		
		v_console += 'fileSize: ' + document.getElementById('fichier')<strong>.files.item(0).fileSize</strong>;
		v_console += '&lt;br \/&gt;';
		
		v_console += 'data: ' + document.getElementById('fichier')<strong>.files.item(0).getAsDataURL()</strong>;
//		v_console += 'data: ' + document.getElementById('fichier')<strong>.files.item(0).getAsBinary()</strong>;
//		v_console += 'data: ' + document.getElementById('fichier')<strong>.files.item(0).getAsText()</strong>;
		v_console += '&lt;br \/&gt;';
	};
	
	document.getElementById('console').innerHTML = v_console;
};

// ]]&gt;
&lt;/script&gt;
	
&lt;div&gt;
	&lt;input type="file" name="fichier" id="fichier" onchange="inputFileOnChange();" /&gt;
	&lt;br /&gt;&lt;br /&gt;
	&lt;code id="console"&gt;...console...&lt;/code&gt;
&lt;/div&gt;
	
&lt;/body&gt;
&lt;/html&gt;

</pre>

<p>Documentation officielle :<br />
&bull; <a href="http://developer.mozilla.org/en/docs/nsIDOMFile">http://developer.mozilla.org/en/docs/nsIDOMFile</a><br />
&bull; <a href="http://developer.mozilla.org/en/docs/nsIDOMFileList">http://developer.mozilla.org/en/docs/nsIDOMFileList</a><br />
&bull; <a href="http://www.w3.org/TR/file-upload/">http://www.w3.org/TR/file-upload/</a><br />
</p>

<hr /><a href="http://res.feedsportal.com/viral/bookmark_fr.cfm?link=http%3A%2F%2Fwww.ab-d.fr%2Fdate%2F2008-07-12%2F&title=Firefox+3+et+input+type%3Dfile+Nouvelle+Formule+%21+%28+upload%2C+path%2C+nsIDOMFile+%29"><img src="http://www.ab-d.fr/images/bookmark.gif" border="0" /></a><br /><br />]]></description>
			<comments>http://www.ab-d.fr/tag/DOM/</comments>
			<guid isPermaLink="false">http://www.ab-d.fr/date/2008-07-12/</guid>
		</item>

		<item>
			<title>insertAfter() avec insertBefore() et node.nextSibling (DOM Core Level 1)</title>
			<link>http://www.ab-d.fr/date/2008-02-23/</link>
			<pubDate>Sat, 23 Feb 2008 04:45:54 +0100</pubDate>
			<author>noreply@ab-d.fr ( Benoit Asselin )</author>
			<category><![CDATA[Javascript]]></category>
			<category><![CDATA[DOM]]></category>
			<description><![CDATA[<p>La méthode <code>element.insertBefore()</code> permet d'insérer un nœud (<em>node</em>) enfant juste avant le nœud enfant de référence parmi un nœud parent.</p>

<pre>
noeudParent.insertBefore(noeudAInserer, noeudDeReference);
</pre>

<p><br />
Il n'existe pas de méthode <code>element.insertAfter()</code> pour insérer un  nœud après le nœud de reference. Pour contourner cette limitation, vous pouvez utiliser <code>element.nextSibling</code>, qui renverra le nœud suivant au nœud spécifié.</p>

<pre>
noeudParent.insertBefore(noeudAInserer, noeudDeReference.nextSibling);
</pre>

<p><br />
Grâce au code source ci-dessous, vous pouvez ajouter la méthode <code>element.insertAfter()</code> et ainsi l'utiliser aussi simplement que <code>element.insertBefore()</code>.</p>

<pre>
Node.prototype.insertAfter = function(noeudAInserer, noeudDeReference) {
	if(noeudDeReference.nextSibling) {
		return this.insertBefore(noeudAInserer, noeudDeReference.nextSibling);
	} else {
		return this.appendChild(noeudAInserer);
	}
}
</pre>

<p><em>Attention: le code ci-dessus ne fonctionne pas sous Internet Explorer... pour ce faire, vous devez utiliser une simple fonction Javascript.</em></p>

<hr /><a href="http://res.feedsportal.com/viral/bookmark_fr.cfm?link=http%3A%2F%2Fwww.ab-d.fr%2Fdate%2F2008-02-23%2F&title=insertAfter%28%29+avec+insertBefore%28%29+et+node.nextSibling+%28DOM+Core+Level+1%29"><img src="http://www.ab-d.fr/images/bookmark.gif" border="0" /></a><br /><br />]]></description>
			<comments>http://www.ab-d.fr/tag/DOM/</comments>
			<guid isPermaLink="false">http://www.ab-d.fr/date/2008-02-23/</guid>
		</item>

		<item>
			<title>Include CSS Stylesheet en DOM (Document Object Model)</title>
			<link>http://www.ab-d.fr/date/2007-09-18/</link>
			<pubDate>Tue, 18 Sep 2007 00:00:00 +0100</pubDate>
			<author>noreply@ab-d.fr ( Benoit Asselin )</author>
			<category><![CDATA[CSS]]></category>
			<category><![CDATA[Javascript]]></category>
			<category><![CDATA[DOM]]></category>
			<description><![CDATA[<pre>
function includeCSS(p_file) {
	var v_css  = document.createElement('link');
	v_css.rel = 'stylesheet'
	v_css.type = 'text/css';
	v_css.href = p_file;
	document.getElementsByTagName('head')[0].appendChild(v_css);
}
</pre>
<hr /><a href="http://res.feedsportal.com/viral/bookmark_fr.cfm?link=http%3A%2F%2Fwww.ab-d.fr%2Fdate%2F2007-09-18%2F&title=Include+CSS+Stylesheet+en+DOM+%28Document+Object+Model%29"><img src="http://www.ab-d.fr/images/bookmark.gif" border="0" /></a><br /><br />]]></description>
			<comments>http://www.ab-d.fr/tag/DOM/</comments>
			<guid isPermaLink="false">http://www.ab-d.fr/date/2007-09-18/</guid>
		</item>

	</channel>
</rss>
