From: dhrname Date: Thu, 19 Apr 2012 11:03:09 +0000 (+0900) Subject: Specとsvgモジュールを編集して、text要素内にある未知の要素に対応させた X-Git-Tag: v16beta~584 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=cca4d38a371628eeb758f7ed77540350b4a2ef18;p=sie%2Fsie.git Specとsvgモジュールを編集して、text要素内にある未知の要素に対応させた --- diff --git a/org/w3c/dom/svg.js b/org/w3c/dom/svg.js index d5eb50d..13ad03a 100644 --- a/org/w3c/dom/svg.js +++ b/org/w3c/dom/svg.js @@ -3888,18 +3888,22 @@ t.prototype = new SVGElement(); if (this._length) { return (this._length); } else { - var t = this.firstChild, - s = 0; - while (t) { - if (t.length && (t.nodeType === /*Node.TEXT_NODE*/ 3)) { - s += t.length; - } else if (t.getNumberOfChars) { //tspan要素などであれば - s += t.getNumberOfChars(); - } - t = t.nextSibling; - } + var s = 0, + f = function (ts) { + while (ts) { + if (ts.length && (ts.nodeType === /*Node.TEXT_NODE*/ 3)) { + s += ts.length; + } else if (ts.getNumberOfChars) { //tspan要素などであれば + s += ts.getNumberOfChars(); + } else if (ts.firstChild && (ts.nodeType === /*Node.ELEMENT_NODE*/ 1)) { + f(ts.firstChild); //再帰的に呼び出す + } + ts = ts.nextSibling; + } + ts = void 0; + }; + f(this.firstChild); this._length = s; - t = void 0; return s; } }; diff --git a/tool/Spec/spec/SvgDomSpec.js b/tool/Spec/spec/SvgDomSpec.js index 49fb7ee..d5338ee 100644 --- a/tool/Spec/spec/SvgDomSpec.js +++ b/tool/Spec/spec/SvgDomSpec.js @@ -1312,6 +1312,10 @@ describe("SVG Spec in JavaScript", function() { s.appendChild(s.ownerDocument.createTextNode(str)); expect(s.getNumberOfChars()).toEqual(s.firstChild.length); s.removeChild(s.firstChild); + s.appendChild(s.ownerDocument.createElementNS("http://sie.sourceforge.jp", "hoge")) + .appendChild(s.ownerDocument.createTextNode(str)); + expect(s.getNumberOfChars()).toEqual(s.firstChild.firstChild.length); + s.removeChild(s.firstChild); str = ""; } });