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(HTMLstring)
{
var d = document.createElement('div');
d.innerHTML = HTMLstring;
var docFrag = document.createDocumentFragment();
for (var i=0, len=d.childNodes.length; i<len; ++i){
docFrag.appendChild(d.childNodes[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(HTMLstring)
{
var d = document.createElement('div');
d.innerHTML = HTMLstring;
var docFrag = document.createDocumentFragment();
while (d.firstChild) {
docFrag.appendChild(d.firstChild)
};
return docFrag;
}
Here is a fuller function that makes use of the Gecko range interface
extensions if available:
function toDOM(HTMLstring)
{
var docBody = document.body || document.documentElement;
if (!docBody) return;
if (document.createRange && (rangeObj = document.createRange())){
var docFrag, rangeObj;
rangeObj.selectNode(docBody);
if ( rangeObj
&& rangeObj.createContextualFragment
&& (docFrag = rangeObj.createContextualFragment(HTMLstring))){
return docFrag;
}
} else if (
'string' == typeof docBody.innerHTML
&& document.createElement
&& document.createDocumentFragment){
var div = document.createElement('div');
var docFrag = document.createDocumentFragment();
div.innerHTML = HTMLstring;
while (div.firstChild){
docFrag.appendChild(div.firstChild)
};
return docFrag;
}
return null;
}
To do far more extensive document generation from XML, try XML for <SCRIPT>:
<URL:http://xmljs.sourceforge.net/index.html>
--
Rob