From 9914e53c62dea21e71f2569469668801d0ee3853 Mon Sep 17 00:00:00 2001 From: Kevin Date: Thu, 14 Oct 2010 21:39:28 +0100 Subject: [PATCH] Added a handy method for recreating the HTML from a structure of nodes --- lib/node-htmlparser.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/lib/node-htmlparser.js b/lib/node-htmlparser.js index b348790..c3be667 100644 --- a/lib/node-htmlparser.js +++ b/lib/node-htmlparser.js @@ -501,6 +501,9 @@ inherits(RssHandler, DefaultHandler); try { entry.pubDate = new Date(DomUtils.getElementsByTagName("updated", item.children, false)[0].children[0].data); } catch (ex) { } + try { + entry.content = DomUtils.outerHTML(DomUtils.getElementsByTagName("content", item.children, false)[0].children[0]); + } catch (ex) { } feed.items.push(entry); }); } @@ -746,6 +749,41 @@ function DefaultHandler (callback, options) { , getElementsByTagType: function DomUtils$getElementsByTagType (type, currentElement, recurse, limit) { return(DomUtils.getElements({ tag_type: type }, currentElement, recurse, limit)); } + + , outerHTML: function DomUtils$outerHTML(currentElement) { + var runningMarkup = ''; + + switch (currentElement.type) { + + case 'tag': + + if (currentElement.name == 'br') { + runningMarkup = runningMarkup + '
'; + } else { + runningMarkup = runningMarkup + '<' + currentElement.name; + if (currentElement.attribs) { + for (var key in currentElement.attribs) { + runningMarkup = runningMarkup + ' ' + key + '=' + '"' + currentElement.attribs[key] + '"'; + }; + } + runningMarkup = runningMarkup + '>'; + if (currentElement.children) { + currentElement.children.forEach(function(el) { + runningMarkup = runningMarkup + DomUtils.outerHTML(el); + }); + } + runningMarkup = runningMarkup + ''; + } + break; + + case 'text': + runningMarkup = runningMarkup + currentElement.data; + break; + + } + + return runningMarkup; + } } function inherits (ctor, superCtor) {