オブジェクト調査用関数
作ったのを忘れないようメモ。たいしたものではありません。。。
2008/01/15 変更
関数そのもののprototype.js依存を解消しました。
既出のオブジェクトは追わないようにしました。
デフォルトで表示する階層を3、各プロパティを20までに制限しました。引数で変更可能です。
})(Prototype);
を
})(document.body, "test", 2, 30);
にすれば、bodyのメンバをid:testの要素内(別途作成)に、最大2階層、各30メンバまで表示、ということになります。(最大階層・メンバ数を大きくするとブラウザによりエラーとされる場合があります。)
<html> <head> <title></title> <body> </body> <script src="prototype.js"></script> <script> (function (obj, id, maxLevel, maxCount){ var div = document.createElement('div'); var text = document.createTextNode(''); div.appendChild(text); function escapeHTML(str) { text.data = str; return div.innerHTML; } var elm = (typeof(id) == "string") ? document.getElementById(id) : id; if(maxLevel == null) maxLevel = 3; if(maxCount == null) maxCount = 20; var already = []; var str = (function(_obj, level){ level++; var _callee = arguments.callee; var str = "<table border>"; var count = 0; for(var key in _obj){ if(count >= maxCount){ str += "<tr><th><i>(OVER MAX COUNT=" + maxCount + ")</i></th><td></td></tr>"; break; } var value = _obj[key]; switch(typeof(value)){ case "undefined": value = "undefined"; break; case "boolean": case "number": break; case "string": case "function": value = escapeHTML(value.toString()); break; case "object": if(value == null){ break; }else if(value == elm){ value = "<i>(THIS ELEMENT)</i>"; break; }else{ var flg = false; for(var i = 0; i < already.length; i++){ if(already[i] == value){ flg = true; break; } } if(flg){ value = "<i>(ALREDY EXISTS)</i>"; }else if(level >= maxLevel){ value = "<i>object (OVER MAX LEVEL=" + maxLevel + ")</i>"; }else{ already.push(value); value = _callee(value, level); } } break; default: var msg = "unknown type : " + typeof(value); alert(msg); throw new Error(msg); } str += "<tr><th>" + escapeHTML(key) + "</th><td>" + value + "</td></tr>"; count++; } str += "</table>"; return str; })(obj, 0); if(elm == null){ elm = document.createElement("div"); document.body.appendChild(elm); } elm.innerHTML = str; })(Prototype); </script> </html>
v1.6.0を読みはじめました(今更^^;)。やっぱりえらく複雑になってますね・・・。解読したのがv1.4.0の頃でよかった。今だったら挫折してる気がします><;
↑はその一環で書いたものです。
記録を載せるかは未定です。書くとしても個人的なメモ程度になると思います。