turn lump of text into a parseable document

J

james.kingston

In my first experimentation with js, I'm writing a greasemonkey script
which adds links to a page which, when clicked, will replace their
parent element with the contents of an element from another URL.

in the following function, pageHTML contains the entire text of an HTML
page, pulled in via GM_xmlhttprequest. The page contains a ul with
id="commentlisting". What I want to do, but can't seem to do, is turn
that lump of html in the pageHTML variable into a document that I can
run document.evaluate and document.getElementById on, just like I can
on the original page.

The second catch below alerts me with "TypeError:
tempnode.getElementById is not a function"


function getExpandedHTML(oldid, pageHTML)
{
GM_log("getExpanded started");
var tempNode;
try {
tempnode = document.createElement("document");
tempnode.innerHTML = pageHTML;
}
catch (e)
{
alert(e);
}
var listnode;
try {
listnode = tempnode.getElementById("commentlisting");
} catch (e)
{
alert(e);
}
//var innerlinks = listnode.evaluate("//a[@href]", listnode,
null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
//addlinkevenets(oldid, innerlinks);

GM_log("getExpanded finished");
return listnode.innerHTML;
}
 
M

Martin Honnen

The second catch below alerts me with "TypeError:
tempnode.getElementById is not a function"


function getExpandedHTML(oldid, pageHTML)
{
GM_log("getExpanded started");
var tempNode;
try {
tempnode = document.createElement("document");
tempnode.innerHTML = pageHTML;

You are creating an _element_ node and set its innerHTML, you are not
creating a _document_ node. Thus that
listnode = tempnode.getElementById("commentlisting");

fails as only document nodes implement the method getElementById.

As far as I know currently browsers like Mozilla or Opera do not provide
an API to script to parse some string with HTML markup into an HTML
document so you might need to help yourself with creating an iframe and
writing the markup in there. But that will then for instance load images
or other stuff in the HTML so it is not an in memory operation.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,280
Latest member
BGBBrock56

Latest Threads

Top