function stringToDOM (inputString) { var normaliseString = function (str) { str = str.replace(/\r/g, " "); str = str.replace(/\n/g, " "); return str; }; var deEntity = function (str) { str = str.replace(/&/g, "&"); str = str.replace(/>/g, ">"); str = str.replace(/</g, "<"); str = str.replace(/ /g, " "); str = str.replace(/"/g, '"'); return str; }; var deSpace = function (str) { str = str.replace(/ /g, ""); return str; }; var processTag = function (str) { //alert(str); var tagreg=/[a-z0-9]+/; var newDOM = document.createDocumentFragment(); var space = str.indexOf(' '); if (space === -1) { var tagName = str.toLowerCase(); try{ newDOM.appendChild(document.createElement(tagName));} catch (e){alert(e+"str: "+str)} } else { tagName = deSpace(str.substring(0, space)).toLowerCase(); if (document.all && tagName === 'input') { newDOM.appendChild(document.createElement('<' + str + '/>')); return newDOM; } str = str.substring(space + 1); newDOM.appendChild(document.createElement(tagName)); while (str.length > 0) { var equal = str.indexOf('='); if (equal >= 0) { var attributeName = deSpace(str.substring(0, equal)).toLowerCase(); var quote = str.indexOf('"'); str = str.substring(quote + 1); quote = str.indexOf('"'); var attributeValue = deEntity(str.substring(0, quote)); str = str.substring(quote + 2); if (document.all && attributeName === 'style') { newDOM.lastChild.style.cssText = attributeValue; } else { newDOM.lastChild.setAttribute(attributeName, attributeValue); } } else { break; } } } return newDOM; }; var findEndTag = function (innerStr, str, lastTag) { var funcInnerStr = innerStr; var funcStr = str; lastTag = lastTag.toLowerCase(); var nextClosingTag = funcStr.indexOf(''); funcInnerStr = funcInnerStr.concat(funcStr.substring(0, nextClosingTag)); funcStr = funcStr.substring(nextClosingTag); while (funcInnerStr.indexOf('<' + lastTag) != -1) { funcInnerStr = funcInnerStr.substring(funcInnerStr.indexOf('<' + lastTag)); funcInnerStr = funcInnerStr.substring(funcInnerStr.indexOf('>') + 1); funcStr = funcStr.substring(funcStr.indexOf('>') + 1); nextClosingTag = funcStr.indexOf(''); funcInnerStr = funcInnerStr.concat(funcStr.substring(0, nextClosingTag)); funcStr = funcStr.substring(nextClosingTag); } return str.length - funcStr.length; }; var parseString = function (str) { var newDOM = document.createDocumentFragment(); while (str && str.length > 0) { var lowerThan = str.indexOf("<"); if (lowerThan === -1) { str = deEntity(str); newDOM.appendChild(document.createTextNode(str)); str = null; } if (lowerThan > 0) { var newTextFrag = deEntity(str.substring(0, lowerThan)); newDOM.appendChild(document.createTextNode(newTextFrag)); str = str.substring(lowerThan); } if (lowerThan === 0) { var comment = str.indexOf(''); var commentContent = str.substring(4, commentEnd); commentContent = deEntity(commentContent); newDOM.appendChild(document.createComment(commentContent)); str = str.substring(commentEnd + 3); } else { var greaterThan = str.indexOf('>'); if (str.substring(greaterThan - 1, greaterThan) === '/') { var emptyTagEnd = str.indexOf('/>'); var emptyTagContent = str.substring(1, emptyTagEnd); newDOM.appendChild(processTag(emptyTagContent)); str = str.substring(emptyTagEnd + 2); } else { var normalTagEnd = str.indexOf('>'); var normalTagContent = str.substring(1, normalTagEnd); var tmpNewDOM = document.createDocumentFragment(); tmpNewDOM.appendChild(processTag(normalTagContent)); str = str.substring(normalTagEnd + 1); var innerStr = str.substring(0, str.indexOf('') + 1); if(tmpNewDOM.lastChild)tmpNewDOM.lastChild.appendChild(parseString(innerStr)); else tmpNewDOM.appendChild(parseString(innerStr)); newDOM.appendChild(tmpNewDOM); } } } } return newDOM; }; //alert(inputString); var newDOM = parseString(inputString); return newDOM; } function DOMtoString (nodeObj) { var entify = function (str) { str = str.replace(/&/g, "&"); str = str.replace(/>/g, ">"); str = str.replace(/ 0) { for (var ii = 0; ii < tagAttributes.length; ii++) { if (document.all) { if (tagAttributes[ii].nodeName && tagAttributes[ii].nodeValue !== null && tagAttributes[ii].nodeValue != '' && (tagAttributes[ii].nodeName != 'contentEditable' && tagAttributes[ii].nodeValue != 'inherit') && (tagAttributes[ii].nodeName != 'shape' && tagAttributes[ii].nodeValue != 'rect')) { string = string.concat(' ' + tagAttributes[ii].nodeName.toLowerCase() + '="' + entify(tagAttributes[ii].nodeValue) + '"'); } if (tagAttributes[ii].nodeName === 'style' && children[i].style.cssText !== null && children[i].style.cssText.length !== 0) { string = string.concat(' style="' + children[i].style.cssText.toLowerCase() + ';"'); } } else { string = string.concat(' ' + tagAttributes[ii].nodeName.toLowerCase() + '="' + entify(tagAttributes[ii].nodeValue) + '"'); } } } if (tagName === 'meta' || tagName === 'img' || tagName === 'br' || tagName === 'input' || tagName === 'link' || tagName === 'hr') { string = string.concat(' />'); } else { string = string.concat('>' + parseDOM(children[i]) +''); } break; case 3: string = string.concat(entify(children[i].nodeValue)); break; case 8: string = string.concat(''); break; } } return string; }; var xhtmlString = parseDOM(nodeObj); return xhtmlString; }