chmel a écrit :
Et on a bien le droit d'écrire un_element.appendChild('<p>Du code <em>HTML</em></p>'); ?

Oh la! tu confonds avec innerHTML.
Justement c'est bien ça le problème. Si je mets du code JavaScript avec innerHTML, le code n'est pas exécuté par le navigateur. Si en revanche j'utilise ma méthode append() de jQuery, le code s'exécute. Un extrait de jQuery :
// Map the jQuery namespace to the '$' one
var $ = jQuery;
jQuery.fn = jQuery.prototype = {
init: function(a,c) {
// Make sure that a selection was provided
a = a || document;
// HANDLE: $(function)
// Shortcut for document ready
if ( jQuery.isFunction(a) )
return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
// Handle HTML strings
if ( typeof a == "string" ) {
// HANDLE: $(html) -> $(array)
var m = /^[^<]*(<(.|\s)+>)[^>]*$/.exec(a);
if ( m )
a = jQuery.clean( [ m[1] ] );
// HANDLE: $(expr)
else
return new jQuery( c ).find( a );
}
return this.setArray(
// HANDLE: $(array)
a.constructor == Array && a ||
// HANDLE: $(arraylike)
// Watch for when an array-like object is passed as the selector
(a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
// HANDLE: $(*)
[ a ] );
},
[...]
append: function() {
return this.domManip(arguments, true, 1, function(a){
this.appendChild( a );
});
},
[...]
domManip: function(args, table, dir, fn){
var clone = this.length > 1, a;
return this.each(function(){
if ( !a ) {
a = jQuery.clean(args, this.ownerDocument);
if ( dir < 0 )
a.reverse();
}
var obj = this;
if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") )
obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));
jQuery.each( a, function(){
fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
});
});
}
};
Je ne comprends pas exactement ce que fait la fonction append(), j'avais cru qu'elle utilisait appendChild(). Mais je viens de vérifier, en remplaçant append() de jQuery par un appendChild(), ça ne fonctionne plus (erreur d'exécution JavaScript).
Je m'y perds.
Sinon, pour restaurer le document.write, est-ce que je peux écrire quelque chose comme
old_write = document.write;
document.write = function(str){...};
[...]
document.write = old_write;
?
Merci