HTMLオブジェクトモデルテンプレートエンジン

前のトピック(http://habrahabr.ru/blogs/javascript/96588/)を読んだ後、古いアイデアが頭に浮かびました。 このアプローチはよく知られていますが、私には見られない欠点があるか、Googleでお互いを理解していませんでした。 一般的に、既成のソリューションを見つけることができなかったため、数時間で自分のスケッチを作成しました。 しかし、Javaスクリプトを使用したパスは現在分岐しているため、実際のプロジェクトでテストすることはできません。

2つの質問は興味深いです、あなたはどのようなマイナスを見て、javascriptの同様の解決策を見ましたか?





各タグ(divなど)は、Htmls.div関数として表示されます。

出力ではHTMLElementを返し、入力では任意の数の型の引数を受け取ります。

1)オブジェクト-属性を定義するために使用されます。

2)文字列-テキスト

3)HTMLElement-ネストされたタグ

4)配列-テキストとタグのリスト。



2つの例



例1


私たちは持っています

var items = [ "x" , "y" ];









取得したい

< div >

< div id ="some" class ="some-class" >

some div

</ div >

some text

< div > x </ div >

< div > y </ div >

</ div >












結果には、必要なものが含まれています。



var result;

with (Htmls) {

result = div(

div({ id: "some" , class : "some-class" },

"some div" ),

"some text" ,

items.map( function (i) {

return div(i);

}))

.outerHTML;

}




* This source code was highlighted with Source Code Highlighter .








上記のトピックの例2


data = {

title: 'C pocket reference' ,

type: 'PDF Document' ,

tag: 'programming' ,

created_at: '5.31.2010'

}

with (Htmls) {

var tagUrl = "tags/" + data.tag;

var result = tr(

td(data.title),

td(data.type),

td(a({href: tagUrl}, data.tag)),

td(data.created_at))

.outerHTML;

}




* This source code was highlighted with Source Code Highlighter .








プレーンコード

Htmls = ( function () {

function initTag(tag, args) {

for ( var i = 0; i < args.length; i++) {

var arg = args[i];

if (arg.constructor == String) {

tag.innerHTML += arg;

}

else if (arg instanceof HTMLElement) {

tag.appendChild(arg);

}

else if (arg.constructor == Array) {

initTag(tag, arg);

}

else if (arg.constructor == Object) {

for ( var j in arg) {

tag.setAttribute(j, arg[j]);

}

}

}

return tag;

}



function createTag(name, args) {

return initTag( document .createElement(name), args);

}



return {

div: function () {

return createTag( "div" , arguments);

}

//

}

})();





* This source code was highlighted with Source Code Highlighter .







All Articles