📄 transform.js
字号:
var htmlElements = "|address|a|blockquote|br|big|b|center|div|dl|em|fieldset|font|h1|h2|h3|h4|h5|h6|i|label|legend|li|link|ol|option|optgroup|pre|p|small|select|span|strong|sub|sup|s|table|tbody|td|textarea|thead|th|tr|ul|u|xmp|img|br|hr|input|xmp|strong|";
var editorTransforms = {
"\<P\> \<\/P\>":"",
"\<P\>\<\/P\>":"",
"\<P\>\<BR\>\<\/P\>":"<br/>"
}
String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }
var filterTagNames = new Array();
var _Node_Getxml = function()
{
var oSerializer = new XMLSerializer();
return oSerializer.serializeToString(this);
}
var getXMLObject = function()
{
var xml = null;
if ( window.ActiveXObject ){
var prefix = ["MSXML3","MSXML2","MSXML","Microsoft"];
for ( var i = 0; i < prefix.length; i++ ) {
try
{
xml = new ActiveXObject( prefix[i] + ".DOMDocument" );
if ( xml ) break;
} catch (e) { }
}
}else{
xml = document.implementation.createDocument('', '', null);
Node.prototype.__defineGetter__('xml', _Node_Getxml);
}
return xml;
}
var class_Transform = function ( sourceDoc )
{
var XML = getXMLObject();
this.toXHTML = function ()
{
var MainNode = XML.appendChild( XML.createElement( "XHTML" ) );
filterElement(sourceDoc.body);
_AppendChildNodes(MainNode, sourceDoc.body);
var sXHTML = MainNode.xml;
sXHTML = filterXHTMLSTR(sXHTML);
sXHTML = filterTag(sXHTML);
return sXHTML;
}
var _AppendChildNodes = function( xmlNode, htmlNode )
{
var oChildren = htmlNode.childNodes;
var i = 0;
while ( i < oChildren.length )
{
i += _AppendNode( xmlNode, oChildren[i] );
}
}
var _AppendNode = function( xmlNode, htmlNode )
{
var iAddedNodes = 1;
switch ( htmlNode.nodeType )
{
case 1 :
var sNodeName = fixtag(htmlNode.nodeName.toLowerCase());
if( sNodeName == "" ) break;
var oNode = xmlNode.appendChild( XML.createElement( sNodeName ) );
var oAttributes = htmlNode.attributes;
for (var n=0 ; n < oAttributes.length ; n++)
{
var oAttribute = oAttributes[n];
if ( oAttribute.specified && oAttribute.nodeName.toLowerCase() + "" != "style" ) _AppendAttribute( oNode, fixtag(oAttribute.nodeName.toLowerCase() + "" ), oAttribute.nodeValue + "" );
}
var cssText = htmlNode.style.cssText;
if ( cssText != "" )
{
if (navigator.appVersion.indexOf("MSIE") != -1 ) cssText = cssText + ";";
_AppendAttribute( oNode, "style", cssText );
}
if ( htmlNode.childNodes.length == 0 )
{
switch ( sNodeName )
{
case "img" :case "input" :case "br" : case "hr" :case "param" :break;
default :
oNode.appendChild( XML.createTextNode( "" ) );
break;
}
}
switch ( sNodeName )
{
case "abbr" :
if ( document.all )
{
var oNextNode=htmlNode.nextSibling;
while ( true )
{
iAddedNodes ++;
if ( oNextNode && oNextNode.nodeName != "/ABBR" )
{
_AppendNode(oNode, oNextNode);
oNextNode = oNextNode.nextSibling;
}else
{
break;
}
}
}
break;
case "area" :
if ( document.all && ! oNode.attributes.getNamedItem( "coords" ) )
{
var sCoords = htmlNode.getAttribute("coords", 2);
if ( sCoords && sCoords !="0,0,0" ) _AppendAttribute( oNode, "coords", sCoords );
}
break;
case "img" :
if ( !oNode.attributes.getNamedItem( "alt" ) ) _AppendAttribute(oNode, "alt", "");
break;
default :
_AppendChildNodes(oNode, htmlNode);
break;
};
case 3 :
if ( htmlNode.nodeValue != null ) xmlNode.appendChild(XML.createTextNode( htmlNode.nodeValue ));
break;
//default : xmlNode.appendChild(XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ));break;
}
return iAddedNodes;
}
var _AppendAttribute = function ( xmlNode, attributeName, attributeValue )
{
if( checkattributeName(attributeName) && attributeName.indexOf("_moz") == -1 && attributeName.substring(0,2) != "on" && attributeValue.indexOf("_moz") == -1 && attributeName != "" )
{
var oXmlAtt = XML.createAttribute(attributeName);
if ( typeof( attributeValue ) == "boolean" && attributeValue )
{
oXmlAtt.nodeValue = attributeName;
}
else
{
oXmlAtt.nodeValue = attributeValue;
}
xmlNode.attributes.setNamedItem(oXmlAtt);
}
}
var fixtag = function (text)
{
return text.replace(/&|\/|<|>|\*|#|:|;|=|\?|\)|\(|%|\[|\]|\$| /g, "") ;
}
var checkattributeName = function (attributeName)
{
var re = new RegExp(/&|\/|<|>|\*|#|:|;|=|\?|\)|\(|%|\[|\]|\$| /gi);
if( re.test(attributeName ) )
{
return false;
}else{
var Re = new RegExp(/[0-9]/gi);
return !Re.test(attributeName.substring(0,1));
}
}
var filterHREFElement = function ( obj )
{
if ( obj == null || obj.attributes == null || obj.attributes.length == 0 ) return;
var aobj = obj.attributes["href"];
var av = "";
if ( aobj != null && aobj.nodeValue != null )
{
av = aobj.nodeValue.toLowerCase();
if ( av.length >= 11 && av.substring(0,11) == "javascript:" )
{
aobj.nodeValue = "";
}else
{
if ( av.length >= 9 && av.substring(0,9) == "vbscript:" ) aobj.nodeValue = "";
}
}
}
var filterStyleElement = function ( obj )
{
if ( obj == null || obj.attributes == null || obj.attributes.length == 0 ) return;
var aobj = obj.getAttribute("style");
var av = "";
for(var e in obj.style) document.getElementById("test").innerHTML += e + "<br>";
if ( aobj != null && aobj.nodeValue != null )
{
av = aobj.nodeValue.toLowerCase();
var re = new RegExp("behavior","gi");
//alert(re.test(av));
aobj.nodeValue = av.replace(av,"");
}
}
var filterElement = function ( obj )
{
if ( obj == null || obj.childNodes.length == 0 ) return;
for ( var i = 0 ; i < obj.childNodes.length ; i ++ )
{
filterHREFElement(obj.childNodes[i]);
//if ( obj.childNodes[i].nodeValue != null ) obj.childNodes[i].nodeValue = obj.childNodes[i].nodeValue.Trim();
var tagName = obj.childNodes[i].tagName;
if ( tagName == null ) tagName = "";
tagName = tagName.toLowerCase();
if ( htmlElements.indexOf("|" + tagName + "|") < 0 && tagName != "" )
{
filterTagNames[filterTagNames.length] = tagName.replace("\\","\\\\");
}
if ( obj.childNodes[i].childNodes.length > 0 ) filterElement( obj.childNodes[i] );
}
}
var filterTag = function ( s )
{
for ( var i = 0 ; i < filterTagNames.length ; i ++ )
{
var re = new RegExp("\<" + filterTagNames[i] + "(.[^\>]*)\>","gi");
s = s.replace(re,"");
re = new RegExp("\<\/" + filterTagNames[i] + "(.[^\>]*)\>","gi");
s = s.replace(re,"");
re = new RegExp("\<" + filterTagNames[i] + "(.[^\>]*)\/\>","gi");
s = s.replace(re,"");
re = new RegExp("\<" + filterTagNames[i] + "\>","gi");
s = s.replace(re,"");
re = new RegExp("\<\/" + filterTagNames[i] + "\>","gi");
s = s.replace(re,"");
re = new RegExp("\<" + filterTagNames[i] + "\/\>","gi");
s = s.replace(re,"");
delete(re);
}
s = s.replace(/\<script.[^\>]*\>(.*)\<\/script\>/gi,"");
s = s.replace(/\<script\>(.*)\<\/script\>/gi,"");
return s;
}
function filterXHTMLSTR ( s )
{
s = s.replace(/\<xhtml\>(.*)\<\/xhtml\>/gi,"$1");
s = s.replace("<XHTML>","");
s = s.replace("</XHTML>","");
s = s.replace("<XHTML/>","");
return s;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -