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

📄 sarissa.js

📁 很棒的在线教学系统
💻 JS
📖 第 1 页 / 共 2 页
字号:
        }//if(window.XMLDocument)        else if(document.implementation && document.implementation.hasFeature && document.implementation.hasFeature('LS', '3.0')){            Document.prototype.async = true;            Document.prototype.onreadystatechange = null;            Document.prototype.parseError = 0;            Document.prototype.load = function(sURI) {                var parser = document.implementation.createLSParser(this.async ? document.implementation.MODE_ASYNCHRONOUS : document.implementation.MODE_SYNCHRONOUS, null);                if(this.async){                    var self = this;                    parser.addEventListener("load",                         function(e) {                             self.readyState = 4;                            Sarissa.copyChildNodes(e.newDocument, self.documentElement, false);                            self.onreadystatechange.call();                         },                         false);                 };                try {                    var oDoc = parser.parseURI(sURI);                }                catch(e){                    this.parseError = -1;                };                if(!this.async)                   Sarissa.copyChildNodes(oDoc, this.documentElement, false);                return oDoc;            };            /**            * <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){                return document.implementation.createDocument(sUri?sUri:"", sName?sName:"", null);            };                };    };//if(_SARISSA_HAS_DOM_CREATE_DOCUMENT)};//==========================================// Common stuff//==========================================if(!window.DOMParser){    /*    * DOMParser is a utility class, used to construct DOMDocuments from XML strings    * @constructor    */    DOMParser = function() {    };    if(_SARISSA_IS_SAFARI){        /**         * 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){            if(contentType.toLowerCase() != "application/xml"){                throw "Cannot handle content type: \"" + contentType + "\"";            };            var xmlhttp = new XMLHttpRequest();            xmlhttp.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(str), false);            xmlhttp.send(null);            return xmlhttp.responseXML;        };    }else if(Sarissa.getDomDocument && Sarissa.getDomDocument() && "loadXML" in Sarissa.getDomDocument()){        DOMParser.prototype.parseFromString = function(sXml, contentType){            var doc = Sarissa.getDomDocument();            doc.loadXML(sXml);            return doc;        };    };};if(window.XMLHttpRequest){    Sarissa.IS_ENABLED_XMLHTTP = true;}else if(_SARISSA_IS_IE){    /**     * Emulate XMLHttpRequest     * @constructor     */    XMLHttpRequest = function() {        return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);    };    Sarissa.IS_ENABLED_XMLHTTP = true;};if(!window.document.importNode && _SARISSA_IS_IE){    try{        /**        * Implements importNode for the current window document in IE using innerHTML.        * Testing showed that DOM was multiple times slower than innerHTML for this,        * sorry folks. If you encounter trouble (who knows what IE does behind innerHTML)        * please gimme a call.        * @param oNode the Node to import        * @param bChildren whether to include the children of oNode        * @returns the imported node for further use        */        window.document.importNode = function(oNode, bChildren){            var importNode = document.createElement("div");            if(bChildren)                importNode.innerHTML = Sarissa.serialize(oNode);            else                importNode.innerHTML = Sarissa.serialize(oNode.cloneNode(false));            return importNode.firstChild;        };        }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 && oDoc.parseError && oDoc.parseError != 0){            /*moz*/            if(oDoc.documentElement.tagName == "parsererror"){                parseErrorText = oDoc.documentElement.firstChild.data;                parseErrorText += "\n" +  oDoc.documentElement.firstChild.nextSibling.firstChild.data;            }/*konq*/            else{                parseErrorText = Sarissa.getText(oDoc.documentElement);/*.getElementsByTagName("h1")[0], false) + "\n";                parseErrorText += Sarissa.getText(oDoc.documentElement.getElementsByTagName("body")[0], false) + "\n";                parseErrorText += Sarissa.getText(oDoc.documentElement.getElementsByTagName("pre")[0], false);*/            };        };        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){    /**     * <p>Factory method to obtain the serialization of a DOM Node</p>     * @returns the serialized Node as an XML string     */    Sarissa.serialize = function(oDoc){        var s = null;        if(oDoc){            s = oDoc.innerHTML?oDoc.innerHTML:(new XMLSerializer()).serializeToString(oDoc);        };        return s;    };}else{    if(Sarissa.getDomDocument && (Sarissa.getDomDocument("","foo", null)).xml){        // see non-IE version        Sarissa.serialize = function(oDoc) {            var s = null;            if(oDoc){                s = oDoc.innerHTML?oDoc.innerHTML:oDoc.xml;            };            return s;        };        /**         * 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(ownerDoc.importNode && (!_SARISSA_IS_IE)) {        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(ownerDoc.importNode && (!_SARISSA_IS_IE)) {           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,"&");};// 

⌨️ 快捷键说明

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