JavaScript/MochiKit/DOM

1月 1, 2003 · Posted in JavaScript, MochiKit · Comment 

DOMを簡単に操作するためのライブラリ。
基本的MochiKit1.3.1
最新の環境は1.4系だと思う。

$(id[,...]):

例のやつ。指定したIDを持つノードを取得。
カンマ区切りで複数指定した場合は複数のノードを配列として取得する。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<div id="name" value="taro" />
<div id="age" value="10" />

<script>

alert($("name","age"));
alert($("name","age")[0].id);
alert($("name","age")[0].value);

</script></body></html>

結果

[object],[object]
name
taro

-てっきりMochiKit.Baseに存在するのかと思ってた。

addElementClass(element,className):

エレメントにClass属性を追加する

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<div id="name" class="Humen" />

<script>

addElementClass($("name"), "Women");
alert($("name").className);

</script></body></html>

結果

Humen Women

-通常は、指定したエレメントに対してクラス名を追加する。
-指定したクラスがエレメントで追加済みだったときは何も処理を行わない。
-他のクラスがエレメントに存在した場合は、そのクラス指定はそのまま残し、指定したクラスを追加する。

addLoadEvent(func)

ウィンドウがロードされたときの処理を指定する。(window.onloadイベントに処理を追加する)

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script>

<script>
addLoadEvent(function(){alert("onLoad!")});
</script>

</head><body></body></html>

結果

onLoad!

addToCallStack(target,path,func[,once]):

targetで渡されたノードのpathプロパティに関数を追加する。
4つ目の引数onceにtrueを指定した場合、ファンクションのコールスタック実行が完了した時点でtargetのpathプロパティにはnullが設定される。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<div id="button" style="width:30px;height:30px;background-color:#ccc;" />

<script>
addToCallStack($("button"), "onclick", function(){alert("onclick!")});
</script>

</body></html>

結果

(button要素をクリックしたタイミングで)onclick!

appendChildNodes(node[,childNode[,...]]):

指定したノードに子要素を追加する。

例(※LIは後述。createDOMの部分で登場する)

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<ul id="country"></ul>

<script>
appendChildNodes($(country), LI("Japan"));
appendChildNodes($(country), LI("China"));
appendChildNodes($(country), LI("Korea"));
</script>

</body></html>

結果

・Japan
・China
・Korea

-子ノードの追加が超簡単!

insertSiblingNodesBefore(node[,siblingNode[,...]]):

sibling???

http://eow.alc.co.jp/Sibling
sibling
【名】
兄弟{きょうだい}、姉妹{しまい}
・Ken took his younger siblings to the park. : ケンは弟たちを公園へ連れていった。
・Do you have any siblings? : きょうだいはいますか?
《siblings》兄弟姉妹{きょうだい しまい}たち
《siblings》《生物》同胞種{どうほうしゅ}
【レベル】9、【変化】《複》siblings、【@】シブリング、【分節】sib・ling

なるほど。

…と思ったら、MochiKit1.4+だった。パス。

insertSiblingNodesAfter(node[,siblingNode[,...]]):

MochiKit1.4+。パス。

createDOM(name[,attrs[,node[,...]]]):

エレメントの作成。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>
<script>

appendChildNodes(currentDocument().body, createDOM("A", {"href":"http://www.yahoo.co.jp/"}, "Yahoo!Japan"));

</script>
</body></html>

結果
[[Yahoo!Japan>http://www.yahoo.co.jp/]]

上記の例では、3つの引数に文字列を渡しているのでテキストノードが作成されている(リンクのラベル)。
ULに対するLIやSelectに対するOptionのような、いわゆる子ノードも作成できる。

便利なエイリアス

HTML用に以下のエイリアスが用意されている。
-A
-BUTTON
-BR
-CANVAS
-DD
-DIV
-DL
-DT
-FIELDSET
-FORM
-H1
-H2
-H3
-H4
-H5
-H6
-HR
-IMG
-INPUT
-LABEL
-LEGEND
-LI
-OL
-OPTGROUP
-OPTION
-P
-PRE
-SELECT
-SPAN
-STRONG
-TABLE
-TBODY
-TD
-TEXTAREA
-TFOOT
-TH
-THEAD
-TR
-TT
-UL

たとえばAの場合、以下は同義

createDom("A", {"href":"http://www.yahoo.co.jp/"}, "Yahoo!Japan");
A({"href":"http://www.yahoo.co.jp/"}, "Yahoo!Japan");

createDOMFunc(tag[,attrs[,node[,...]]]):

createDOMのエイリアス関数を作るための関数

var ITEM = createDOMFunc("ITEM");
ITEM({"price":"10"});

-最初よくわからなかったんだけど、ソース見て納得。

実装

createDOMFunc:function(){
var m=MochiKit.Base;
return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments));
}

currentDocument():

一般的なDOMでいうdocumentオブジェクトの取得

var doc = currentDocument();

currentWindow():

一般的なDOMでいうwindowオブジェクトの取得

var win = currentWindow();

emitHTML(dom[,lst]):

emit
http://eow.alc.co.jp/emit/
【他動】
〔におい・光などを〕放つ、出す、放射{ほうしゃ}する
・The sun constantly emits light and heat into space. : 太陽は常に光と熱を宇宙に放っている。
〜を発令{はつれい}する、発する、発行{はっこう}する
〜を立てる、口に出す
《化》揮散{きさん}する

受け取ったノードを、HTML文字列として配列に分割する。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>
<script>

var doc = emitHTML(currentDocument().body);
alert(doc.join(""));

</script>
</body></html>

結果

<body aLink="" background="" bgColor="" bgProperties=""
bottomMargin="15" dataFld="null" dataFormatAs="null" dataSrc="null"
leftMargin="10" link="" noWrap="false" onafterprint="null" onbeforeprint="null"
onbeforeunload="null" onload="null" onselect="null" onunload="null"
rightMargin="10" scroll="" text="" topMargin="15" vLink="">
<script charset="" dataFld="null" dataFormatAs="null" dataSrc="null" defer="false"
event="" for="" onerror="null" src="" type=""/>
</body>

-すべての属性が出力される

escapeHTML

HTML特殊文字のエスケープ処理を実行

> → &gt;
< → &lt;
& → &amp;
" → &quot;

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>
<script>

alert(escapeHTML(‘<"hello"&"bye">’));

</script>
</body></html>

結果

&lt;&quot;hello&quot;&amp;&quot;bye&quot;&gt;

focusOnLoad(element):

ロード時にフォーカスを有効にするエレメントを指定します。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<input type="text" name="name" />

<script>
focusOnLoad($("name"));
</script>

</body></html>

-onLoad()時のonFocus()を簡単に実現

formContents(elem=document.body):

指定したエレメントのDOMツリーを走査して、フォームエレメント名と値をカンマ区切りで取得する。
引数を省略すると、document.bodyが対象となる。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<input type="text" name="name" value="なまえ" />
<input type="hidden" name="age" value="10" />
<input type="password" name="memo" value="あかさたな" />

<script>
alert(formContents());
</script>

</body></html>

結果

name,なまえ,age,10,memo,あかさたな

getElement(id[,...]):

指定したIDを持つノードを取得。
引数が複数の場合はエレメントを配列として取得する。

$()と等価。

$=this.getElement;

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<input id="name" type="text" name="name" value="なまえ" />
<input id="age" type="hidden" name="age" value="10" />

<script>
alert(getElement("name"));
alert(getElement("name", "age"));
</script>

</body></html>

getElementsByTagAndClassName(tagName,className,parent=document):

指定したタグ、クラス(両方またはどちらか一方)に一致したエレメントを取得する。

<html><head><title>MochiKit</title><script src="MochiKit.js" type="text/javascript"></script></head><body>

<span class="text" />
<span class="text" />
<div class="text" />
<span class="document" />
<span class="document" />

<script>
alert(getElementsByTagAndClassName("span", null));
alert(getElementsByTagAndClassName("span", "text"));
alert(getElementsByTagAndClassName(null, "text"));
</script>

</body></html>

結果

[object],[object],[object],[object]←spanタグのエレメントをすべて取得
[object],[object]←spanタグのtextクラスのエレメントを取得
[object],[object],[object]←textクラスのエレメントを取得

getFirstElementByTagAndClassName(tagName,className,parent=document):

MochiKit 1.4+ パス

getFirstParentByTagAndClassName(elem,tagName=”,className=null):

MochiKit 1.4+ パス

getNodeAttribute(node,attr):

受け取ったノードの属性を値を取得?
その際に、例外を発生させない。(例外発生時にはnullを返却する)

JavaScript/MochiKit/Iter

1月 1, 2003 · Posted in JavaScript, MochiKit · Comment 

実験中

code

/*
alert(operator.gt(1, 10));

theSum = sum(takewhile(

partial(operator.gt, 10),
imap(
partial(operator.mul, 2),
count()
)
));

//ok( theSum == (0 + 2 + 4 + 6 + 8) );

var s = sum([2, 4, 6]);
alert(s);
//ok( s == 12 );
var c = counter();
alert( c());
alert(c() );

var r = range(1, 10);
// var r = [0,1,2,3,4,5,6,7,8,9];
//alert(r.next());
//alert(list(r));

/*

forEach(r,
function(i){
alert(i);
});

//var a = cycle(r);
//alert(a.next());
//alert(a.next());
//alert(a.next());
//alert(a.next());

//var a = range(5, 7);
//var b = range(1, 3);
//var c = chain(a, b);
//alert(c.next());
//alert(c.next());
//alert(c.next());
//alert(c.next());

// starting
//var d = dropwhile(function(i){
// if(i != 5){return true;}else{return false;}
//}, r);
//
//alert(d.next());
//alert(d.next());
//alert(d.next());

//
//var e = every(r, function(i){return i > 10});
//alert(e);//bool

// todo
//exhaust
//applymap

//(?)
//r = new Array(1,1,1,2,2,3,4,5);
//alert(r);
//var g = groupby(r);
//alert(g.next());
//alert(g.next());
//alert(g.next());

//(?)
//r = new Array(1,1,1,2,2,3,4,5);
//alert(r);
//var g = groupby_as_array(r);
//alert(g);

//var i = ifilter(function(i){if(i%2==0){return true;}else{return false;}}, r);
//alert(i.next());
//alert(i.next());
//alert(i.next());
//alert(i.next());
//alert(i.next());

//var i = ifilterfalse(function(i){if(i%2==0){return true;}else{return false;}}, r);
//alert(i.next());
//alert(i.next());
//alert(i.next());
//alert(i.next());
//alert(i.next());

//var i = imap(function(v){return v}, r);
//alert(i.next());
//alert(i.next());
//alert(i.next());

//var is = islice(r, 1, 4, 1);
//alert(is.next());
//alert(is.next());
//alert(is.next());

//var it = iter(r);
//var it = iter([3,5,7,9]);
//alert(it.next());
//alert(it.next());
//alert(it.next());

//var r2 = range(2, 11);
//var iz = izip(r, r2);
//alert(iz.next());
//alert(iz.next());

//var a = list(r); // a = array
//alert(a);

//var it = iter(r);
//alert(next(it));
//alert(next(it));
//alert(next(it));

// a = range(1,10);

JavaScript/MochiKit/ライブラリ一覧

1月 1, 2003 · Posted in JavaScript, MochiKit · Comment 

-MochiKit.Async – manage asynchronous
–非同期管理

-MochiKit.Base – functional programming and useful comparisons
–関数プログラミングと比較

-MochiKit.DOM – painless DOM manipulation API
–易しいDOM操作

-MochiKit.DragAndDrop – drag and drop
–ドラッグアンドドロップ

-MochiKit.Color – color abstraction with CSS3 support
–MochiKit.ColorCSS3 でサポートされる色抽象概念

-MochiKit.DateTime – "what time is it anyway?"
–日時関連

-MochiKit.Format – string formatting goes here
–フォーマット

-MochiKit.Iter – itertools for JavaScript; iteration made HARD, and then easy
–イテレーション

-MochiKit.Logging – we’re all tired of alert()
–ロギング

-MochiKit.LoggingPane – interactive MochiKit.Logging pane
–ログ表示用のパネル

-MochiKit.Selector – selecting elements by CSS selector syntax
–CSSセレクタ

-MochiKit.Signal – simple universal event handling
–簡単で万能ななイベントハンドリング

-MochiKit.Style – painless CSS manipulation API
–易しいCSS操作

-MochiKit.Sortable – sortable
–ソート

-MochiKit.Visual – visual effects
–ヴィジュアル効果