⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sarissa.js

📁 sarissa用于支持多浏览器的浏览及编程
💻 JS
📖 第 1 页 / 共 2 页
字号:
        * <p>Attached by an event handler to the load event. Internal use.</p>        * @private        */        _sarissa_XMLDocument_onload = function(){            Sarissa.__handleLoad__(this);        };        /**         * <p>Sets the readyState property of the given DOM Document object.         * Internal use.</p>         * @private         * @argument oDoc the DOM Document object to fire the         *          readystatechange event         * @argument iReadyState the number to change the readystate property to         */        Sarissa.__setReadyState__ = function(oDoc, iReadyState){            oDoc.readyState = iReadyState;            oDoc.readystate = iReadyState;            if (oDoc.onreadystatechange != null && typeof oDoc.onreadystatechange == "function")                oDoc.onreadystatechange();        };        Sarissa.getDomDocument = function(sUri, sName){            var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);            if(!oDoc.onreadystatechange){                            /**                * <p>Emulate IE's onreadystatechange attribute</p>                */                oDoc.onreadystatechange = null;            };            if(!oDoc.readyState){                /**                * <p>Emulates IE's readyState property, which always gives an integer from 0 to 4:</p>                * <ul><li>1 == LOADING,</li>                * <li>2 == LOADED,</li>                * <li>3 == INTERACTIVE,</li>                * <li>4 == COMPLETED</li></ul>                */                oDoc.readyState = 0;            };            oDoc.addEventListener("load", _sarissa_XMLDocument_onload, false);            return oDoc;        };        if(window.XMLDocument){            // do nothing        }// TODO: check if the new document has content before trying to copynodes, check  for error handling in DOM 3 LS        else if(_SARISSA_HAS_DOM_FEATURE && window.Document && !Document.prototype.load && document.implementation.hasFeature('LS', '3.0')){            //Opera 9 may get the XPath branch which gives creates XMLDocument, therefore it doesn't reach here which is good            /**            * <p>Factory method to obtain a new DOM Document object</p>            * @argument sUri the namespace of the root node (if any)            * @argument sUri the local name of the root node (if any)            * @returns a new DOM Document            */            Sarissa.getDomDocument = function(sUri, sName){                var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);                return oDoc;            };        }        else {            Sarissa.getDomDocument = function(sUri, sName){                var oDoc = document.implementation.createDocument(sUri?sUri:null, sName?sName:null, null);                // looks like safari does not create the root element for some unknown reason                if(oDoc && (sUri || sName) && !oDoc.documentElement){                    oDoc.appendChild(oDoc.createElementNS(sUri, sName));                };                return oDoc;            };        };    };//if(_SARISSA_HAS_DOM_CREATE_DOCUMENT)};//==========================================// Common stuff//==========================================if(!window.DOMParser){    if(_SARISSA_IS_SAFARI){        /*         * DOMParser is a utility class, used to construct DOMDocuments from XML strings         * @constructor         */        DOMParser = function() { };        /**         * Construct a new DOM Document from the given XMLstring        * @param sXml the given XML string        * @param contentType the content type of the document the given string represents (one of text/xml, application/xml, application/xhtml+xml).         * @return a new DOM Document from the given XML string        */        DOMParser.prototype.parseFromString = function(sXml, contentType){            var xmlhttp = new XMLHttpRequest();            xmlhttp.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(sXml), false);            xmlhttp.send(null);            return xmlhttp.responseXML;        };    }else if(Sarissa.getDomDocument && Sarissa.getDomDocument() && Sarissa.getDomDocument(null, "bar").xml){        DOMParser = function() { };        DOMParser.prototype.parseFromString = function(sXml, contentType){            var doc = Sarissa.getDomDocument();            doc.loadXML(sXml);            return doc;        };    };};if((typeof(document.importNode) == "undefined") && _SARISSA_IS_IE){    try{        /**        * Implementation of importNode for the context window document in IE        * @param oNode the Node to import        * @param bChildren whether to include the children of oNode        * @returns the imported node for further use        */        document.importNode = function(oNode, bChildren){            var tmp;            if(oNode.nodeName == "tbody" || oNode.nodeName == "tr"){                tmp = document.createElement("table");            }            else if(oNode.nodeName == "td"){                tmp = document.createElement("tr");            }            else if(oNode.nodeName == "option"){                tmp = document.createElement("select");            }            else{                tmp = document.createElement("div");            };            if(bChildren){                tmp.innerHTML = oNode.xml ? oNode.xml : oNode.outerHTML;            }else{                tmp.innerHTML = oNode.xml ? oNode.cloneNode(false).xml : oNode.cloneNode(false).outerHTML;            };            return tmp.getElementsByTagName("*")[0];        };    }catch(e){ };};if(!Sarissa.getParseErrorText){    /**     * <p>Returns a human readable description of the parsing error. Usefull     * for debugging. Tip: append the returned error string in a &lt;pre&gt;     * element if you want to render it.</p>     * <p>Many thanks to Christian Stocker for the initial patch.</p>     * @argument oDoc The target DOM document     * @returns The parsing error description of the target Document in     *          human readable form (preformated text)     */    Sarissa.getParseErrorText = function (oDoc){        var parseErrorText = Sarissa.PARSED_OK;        if(!oDoc.documentElement){            parseErrorText = Sarissa.PARSED_EMPTY;        } else if(oDoc.documentElement.tagName == "parsererror"){            parseErrorText = oDoc.documentElement.firstChild.data;            parseErrorText += "\n" +  oDoc.documentElement.firstChild.nextSibling.firstChild.data;        } else if(oDoc.getElementsByTagName("parsererror").length > 0){            var parsererror = oDoc.getElementsByTagName("parsererror")[0];            parseErrorText = Sarissa.getText(parsererror, true)+"\n";        } else if(oDoc.parseError && oDoc.parseError.errorCode != 0){            parseErrorText = Sarissa.PARSED_UNKNOWN_ERROR;        };        return parseErrorText;    };};Sarissa.getText = function(oNode, deep){    var s = "";    var nodes = oNode.childNodes;    for(var i=0; i < nodes.length; i++){        var node = nodes[i];        var nodeType = node.nodeType;        if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){            s += node.data;        } else if(deep == true                    && (nodeType == Node.ELEMENT_NODE                        || nodeType == Node.DOCUMENT_NODE                        || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){            s += Sarissa.getText(node, true);        };    };    return s;};if(!window.XMLSerializer     && Sarissa.getDomDocument     && Sarissa.getDomDocument("","foo", null).xml){    /**     * Utility class to serialize DOM Node objects to XML strings     * @constructor     */    XMLSerializer = function(){};    /**     * Serialize the given DOM Node to an XML string     * @param oNode the DOM Node to serialize     */    XMLSerializer.prototype.serializeToString = function(oNode) {        return oNode.xml;    };};/** * strips tags from a markup string */Sarissa.stripTags = function (s) {    return s.replace(/<[^>]+>/g,"");};/** * <p>Deletes all child nodes of the given node</p> * @argument oNode the Node to empty */Sarissa.clearChildNodes = function(oNode) {    // need to check for firstChild due to opera 8 bug with hasChildNodes    while(oNode.firstChild) {        oNode.removeChild(oNode.firstChild);    };};/** * <p> Copies the childNodes of nodeFrom to nodeTo</p> * <p> <b>Note:</b> The second object's original content is deleted before  * the copy operation, unless you supply a true third parameter</p> * @argument nodeFrom the Node to copy the childNodes from * @argument nodeTo the Node to copy the childNodes to * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is false */Sarissa.copyChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {    if((!nodeFrom) || (!nodeTo)){        throw "Both source and destination nodes must be provided";    };    if(!bPreserveExisting){        Sarissa.clearChildNodes(nodeTo);    };    var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;    var nodes = nodeFrom.childNodes;    if(typeof(ownerDoc.importNode) != "undefined")  {        for(var i=0;i < nodes.length;i++) {            nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));        };    } else {        for(var i=0;i < nodes.length;i++) {            nodeTo.appendChild(nodes[i].cloneNode(true));        };    };};/** * <p> Moves the childNodes of nodeFrom to nodeTo</p> * <p> <b>Note:</b> The second object's original content is deleted before  * the move operation, unless you supply a true third parameter</p> * @argument nodeFrom the Node to copy the childNodes from * @argument nodeTo the Node to copy the childNodes to * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is */ Sarissa.moveChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {    if((!nodeFrom) || (!nodeTo)){        throw "Both source and destination nodes must be provided";    };    if(!bPreserveExisting){        Sarissa.clearChildNodes(nodeTo);    };    var nodes = nodeFrom.childNodes;    // if within the same doc, just move, else copy and delete    if(nodeFrom.ownerDocument == nodeTo.ownerDocument){        while(nodeFrom.firstChild){            nodeTo.appendChild(nodeFrom.firstChild);        };    } else {        var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;        if(typeof(ownerDoc.importNode) != "undefined") {           for(var i=0;i < nodes.length;i++) {               nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));           };        }else{           for(var i=0;i < nodes.length;i++) {               nodeTo.appendChild(nodes[i].cloneNode(true));           };        };        Sarissa.clearChildNodes(nodeFrom);    };};/**  * <p>Serialize any object to an XML string. All properties are serialized using the property name * as the XML element name. Array elements are rendered as <code>array-item</code> elements,  * using their index/key as the value of the <code>key</code> attribute.</p> * @argument anyObject the object to serialize * @argument objectName a name for that object * @return the XML serializationj of the given object as a string */Sarissa.xmlize = function(anyObject, objectName, indentSpace){    indentSpace = indentSpace?indentSpace:'';    var s = indentSpace  + '<' + objectName + '>';    var isLeaf = false;    if(!(anyObject instanceof Object) || anyObject instanceof Number || anyObject instanceof String         || anyObject instanceof Boolean || anyObject instanceof Date){        s += Sarissa.escape(""+anyObject);        isLeaf = true;    }else{        s += "\n";        var itemKey = '';        var isArrayItem = anyObject instanceof Array;        for(var name in anyObject){            s += Sarissa.xmlize(anyObject[name], (isArrayItem?"array-item key=\""+name+"\"":name), indentSpace + "   ");        };        s += indentSpace;    };    return s += (objectName.indexOf(' ')!=-1?"</array-item>\n":"</" + objectName + ">\n");};/**  * Escape the given string chacters that correspond to the five predefined XML entities * @param sXml the string to escape */Sarissa.escape = function(sXml){    return sXml.replace(/&/g, "&amp;")        .replace(/</g, "&lt;")        .replace(/>/g, "&gt;")        .replace(/"/g, "&quot;")        .replace(/'/g, "&apos;");};/**  * Unescape the given string. This turns the occurences of the predefined XML  * entities to become the characters they represent correspond to the five predefined XML entities * @param sXml the string to unescape */Sarissa.unescape = function(sXml){    return sXml.replace(/&apos;/g,"'")        .replace(/&quot;/g,"\"")        .replace(/&gt;/g,">")        .replace(/&lt;/g,"<")        .replace(/&amp;/g,"&");};//   EOF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -