RobG said on 30/03/2006 9:59 AM AEST:
RobG said on 30/03/2006 7:33 AM AEST:
[...]
Something like (untested):
function toDOM(HTMLstrin g)
{
var d = document.create Element('div');
d.innerHTML = HTMLstring;
var docFrag = document.create DocumentFragmen t();
for (var i=0, len=d.childNode s.length; i<len; ++i){
docFrag.appendC hild(d.childNod es[i]);
}
return docFrag;
}
Doesn't work.
I'm an idiot - of course it doesn't work, the childNodes collection is
'live' but my counter (len) isn't. This version *does* work in Firefox
& IE:
function toDOM(HTMLstrin g)
{
var d = document.create Element('div');
d.innerHTML = HTMLstring;
var docFrag = document.create DocumentFragmen t();
while (d.firstChild) {
docFrag.appendC hild(d.firstChi ld)
};
return docFrag;
}
Here is a fuller function that makes use of the Gecko range interface
extensions if available:
function toDOM(HTMLstrin g)
{
var docBody = document.body || document.docume ntElement;
if (!docBody) return;
if (document.creat eRange && (rangeObj = document.create Range())){
var docFrag, rangeObj;
rangeObj.select Node(docBody);
if ( rangeObj
&& rangeObj.create ContextualFragm ent
&& (docFrag = rangeObj.create ContextualFragm ent(HTMLstring) )){
return docFrag;
}
} else if (
'string' == typeof docBody.innerHT ML
&& document.create Element
&& document.create DocumentFragmen t){
var div = document.create Element('div');
var docFrag = document.create DocumentFragmen t();
div.innerHTML = HTMLstring;
while (div.firstChild ){
docFrag.appendC hild(div.firstC hild)
};
return docFrag;
}
return null;
}
To do far more extensive document generation from XML, try XML for <SCRIPT>:
<URL:http://xmljs.sourcefor ge.net/index.html>
--
Rob