Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

HTML操作系

個人的にほしいなあと思うもの。
関数チックに書いてみっか。
prototype.jsよかMochiKitdojoに惹かれてしまうんだよねえ。

if (typeof(kumu.dom) == 'undefined') {
    kumu.dom = {};
};

kumu.update(kumu.dom, {
    createDOM : function (name, attrs, text) {
        var element;
        var self = kumu.dom;
        if (typeof(name) == 'string') {
            if (attrs && "name" in attrs) {
                name = '<' + name + ' name="' + self.escapeHTML(attrs.name) + '">';
            }
            element = document.createElement(name);
        } else {
            element = name;
        }
        if (attrs) {
            self.updateNodeAttributes(elem, attrs);
        }
        if(text){
            var textN = document.createTextNode(text);
    	    element.appendChild(textN);
        }
        return element;
    },
  
    createDOMFunc : function (tags) {
        var name = tags;
	    return function (attrs, text){ 
	        return kumu.dom.createDOM(name, attrs ,text);
	    }
    },

    updateNodeAttributes : function (node, attrs) {
        var element = $i(node);
        if (attrs) {
            for (var k in attrs) {
                var v = attrs[k];
                if (k.substring(0, 2) == "on") {
                    if (typeof(v) == "string") {
                        v = new Function(v);
                    }
                    element[k] = v;
                } else {
                   element.setAttribute(k, v);
                }
           }  
        }
        return element;
    },
    
    insertBefore : function(node, ref){
        if((!node)||(!ref)){ 
	        return false; 
        }
        node = $i(node);
        ref = $i(ref);
	    var parent = ref.parentNode;
	    parent.insertBefore(node, ref);
	    return true;
    },

    insertAfter : function(node, ref){
        if((!node)||(!ref)){ 
	        return false; 
	    }
	    node = $i(node);
        ref = $i(ref);
	    var pn = ref.parentNode;
	    if(ref == pn.lastChild){
		    pn.appendChild(node);
	    }else{
		    return this.insertBefore(node, ref.nextSibling);
	    } 
	    return true;
    },

    insert : function(node, ref, position){
	    if((!node)||(!ref)||(!position)){ 
	        return false; 
	    }
        node = $i(node);
        ref = $i(ref);
	    switch(position.toLowerCase()){
		    case "before":
			    return kumu.dom.insertBefore(node, ref);
		    case "after":
			    return kumu.dom.insertAfter(node, ref);
		    case "first":
			    if(ref.firstChild){
				    return kumu.dom.insertBefore(node, ref.firstChild);
			    }else{
				    ref.appendChild(node);
				    return true;
			    }
		        break;
		    default: 
			    ref.appendChild(node);
			    return true;
	    }
    }
    
});

var UL = kumu.dom.createDOMFunc("ul");
var OL = kumu.dom.createDOMFunc("ol");
var LI = kumu.dom.createDOMFunc("li");
var TD = kumu.dom.createDOMFunc("td");
var TR = kumu.dom.createDOMFunc("tr");
var TBODY = kumu.dom.createDOMFunc("tbody");
var THEAD = kumu.dom.createDOMFunc("thead");
var TFOOT = kumu.dom.createDOMFunc("tfoot");
var TABLE = kumu.dom.createDOMFunc("table");
var TH = kumu.dom.createDOMFunc("th");
var INPUT = kumu.dom.createDOMFunc("input");
var SPAN = kumu.dom.createDOMFunc("span");
var A = kumu.dom.createDOMFunc("a");
var DIV = kumu.dom.createDOMFunc("div");
var IMG = kumu.dom.createDOMFunc("img");
var BUTTON = kumu.dom.createDOMFunc("button");
var TT = kumu.dom.createDOMFunc("tt");
var PRE = kumu.dom.createDOMFunc("pre");
var H1 = kumu.dom.createDOMFunc("h1");
var H2 = kumu.dom.createDOMFunc("h2");
var H3 = kumu.dom.createDOMFunc("h3");
var BR = kumu.dom.createDOMFunc("br");
var HR = kumu.dom.createDOMFunc("hr");
var LABEL = kumu.dom.createDOMFunc("label");
var TEXTAREA = kumu.dom.createDOMFunc("textarea");
var FORM = kumu.dom.createDOMFunc("form");
var P = kumu.dom.createDOMFunc("p");
var SELECT = kumu.dom.createDOMFunc("select");
var OPTION = kumu.dom.createDOMFunc("option");
var OPTGROUP = kumu.dom.createDOMFunc("optgroup");
var LEGEND = kumu.dom.createDOMFunc("legend");
var FIELDSET = kumu.dom.createDOMFunc("fieldset");
var STRONG = kumu.dom.createDOMFunc("strong");
var CANVAS = kumu.dom.createDOMFunc("canvas");

確認用HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>KumuDomTest</title>
<link rel="stylesheet" type="text/css" href="../css/jsUnitStyle.css">
<script language="JavaScript" type="text/javascript" src="../js/kumu.js?time=123" ></script>
<script language="JavaScript" type="text/javascript" src="../js/kumu/dom.js?time=123" ></script>
<script language="JavaScript" type="text/javascript">
var H1 = kumu.dom.createDOM('h1',null,'----A----');
var H2Func = H2;
var H2 = H2Func(null, '----B----');

</script>
</head>
<body>
<div id = "1">Test</div>
<form name="myForm">
	<input type="button" name="test1" value="test1" onclick="kumu.dom.insertBefore('1', 'target');">
	<input type="button" name="test2" value="test2" onclick="kumu.dom.insertAfter('1', 'target');">
	<input type="button" name="test3" value="test3" onclick="kumu.dom.insertAfter(H1, 'target');">
	<input type="button" name="test3" value="test4" onclick="kumu.dom.insertAfter(H2, 'target');">
</form>
<div id = "target">-------------------------</div>
</body>
</html>

んーnew Element()とかの方が好かれるのかどうか微妙だね。
うくく。