svnno****@sourc*****
svnno****@sourc*****
2010年 4月 30日 (金) 23:33:17 JST
Revision: 1809 http://sourceforge.jp/projects/sie/svn/view?view=rev&revision=1809 Author: dhrname Date: 2010-04-30 23:33:16 +0900 (Fri, 30 Apr 2010) Log Message: ----------- importNodeメソッドの修正 Modified Paths: -------------- branches/ufltima/core.js Modified: branches/ufltima/core.js =================================================================== --- branches/ufltima/core.js 2010-04-29 14:43:34 UTC (rev 1808) +++ branches/ufltima/core.js 2010-04-30 14:33:16 UTC (rev 1809) @@ -842,73 +842,62 @@ *自身のドキュメントノードに、他のドキュメントノードから作られたノードを取り込みたいときに用いる */ /*Node*/ Document.prototype.importNode = function( /*Node*/ importedNode, /*boolean*/ deep) { - var s; + var s, imn = importedNode.nodeType; /*以下の処理は引き渡されたimportedNodeがMSXMLによって解析された *データであることを前提にしている */ - switch (importedNode.nodeType) { - case Node.ELEMENT_NODE: - s = this.createElementNS(importedNode.namespaceURI, importedNode.nodeName); - var attr = importedNode.attributes, att; - for (var i=0,atli=attr.length;i<atli;++i) { //NamedNodeMapを検索する - att = this.importNode(attr[i], false); - s.setAttributeNodeNS(att); + if (imn === Node.ELEMENT_NODE) { + s = this.createElementNS(importedNode.namespaceURI, importedNode.nodeName); + var attr = importedNode.attributes, att; + for (var i=0,atli=attr.length;i<atli;++i) { //NamedNodeMapを検索する + att = this.importNode(attr[i], false); + s.setAttributeNodeNS(att); + } + if (deep) { + var fi = importedNode.firstChild, n; + while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する + n = this.importNode(fi, true); + s.appendChild(n); + fi = fi.nextSibling; } - if (deep) { - var fi = importedNode.firstChild, n; - while (fi) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する - n = this.importNode(fi, true); - s.appendChild(n); - fi = fi.nextSibling; - } + } + i = attr = att = atli = n = ch = chli = null; + } else if(imn === Node.ATTRIBUTE_NODE) { + var uri = importedNode.namespaceURI; + uri = (uri === "") ? null : uri; //空文字列はnullとして扱うようにする(MSXMLがから文字列を返す時の対策) + s = this.createAttributeNS(uri, importedNode.nodeName); + s.nodeValue = importedNode.nodeValue; + } else if(imn === Node.TEXT_NODE) { + s = this.createTextNode(importedNode.data); + } else if(imn === Node.COMMENT_NODE) { + s = this.createComment(importedNode.data); + } else if(imn === Node.DOCUMENT_FRAGMENT_NODE) { + s = this.createDocumentFragment(); + if (deep) { + var ch = importedNode.childNodes, n; + for (var i=0,chli=ch.length;i<chli;i++) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する + n = this.importNode(ch[i], true); + s.appendChild(n); } - i = attr = att = atli = n = ch = chli = null; - break; - case Node.ATTRIBUTE_NODE: - var uri = importedNode.namespaceURI; - uri = (uri === "") ? null : uri; //空文字列はnullとして扱うようにする(MSXMLがから文字列を返す時の対策) - s = this.createAttributeNS(uri, importedNode.nodeName); - s.nodeValue = importedNode.nodeValue; - break; - case Node.TEXT_NODE: - s = this.createTextNode(importedNode.data); - case Node.COMMENT_NODE: - s = this.createComment(importedNode.data); - break; - case Node.DOCUMENT_FRAGMENT_NODE: - s = this.createDocumentFragment(); - if (deep) { - var ch = importedNode.childNodes, n; - for (var i=0,chli=ch.length;i<chli;i++) { //子ノードを検索して、子供がいれば、importNodeメソッドを再帰的に実行する - n = this.importNode(ch[i], true); - s.appendChild(n); - } - } - i = n = ch = chli = null; - break; - case Node.CDATA_SECTION_NODE: - s = this.createCDATASection(); - break; - case Node.ENTITY_REFERENCE_NODE: - s = this.createEntityReference(importedNode.nodeName); - break; - case Node.ENTITY_NODE: - s = new Entity(); - s.publicId = importedNode.publicId; - s.systemId = importedNode.systemId; - s.notationName = importedNode.notationName; - break; - case Node.PROCESSING_INSTRUCTION_NODE: - s = this.createProcessingInstruction(importedNode.nodeName, importedNode.nodeValue) - break; - case Node.NOTATION_NODE: - s = new Notation(); - s.publicId = importedNode.publicId; - s.systemId = importedNode.systemId; - break; - default: - throw (new DOMException(DOMException.NOT_SUPPORTED_ERR)); - break; + } + i = n = ch = chli = null; + } else if(imn === Node.CDATA_SECTION_NODE) { + s = this.createCDATASection(); + } else if(imn === Node.ENTITY_REFERENCE_NODE) { + s = this.createEntityReference(importedNode.nodeName); + } else if(imn === Node.ENTITY_NODE) { + s = new Entity(); + s.publicId = importedNode.publicId; + s.systemId = importedNode.systemId; + s.notationName = importedNode.notationName; + } else if(imn === Node.PROCESSING_INSTRUCTION_NODE ) { + s = this.createProcessingInstruction(importedNode.nodeName, importedNode.nodeValue) + } else if(imn === Node.NOTATION_NODE) { + s = new Notation(); + s.publicId = importedNode.publicId; + s.systemId = importedNode.systemId; + } else { + throw (new DOMException(DOMException.NOT_SUPPORTED_ERR)); } importedNode = deep = null; return s;