Dom7 - カスタム DOM ライブラリ

Framework7 は、DOM 操作のためでさえ、サードパーティ製のライブラリを一切使用していません。DOM 操作のために、最先端で高性能なメソッドを最大限に活用する独自のカスタム DOM7 - DOM ライブラリがあります。新しいことを学ぶ必要はありません。その使用方法は、最も人気があり広く使用されているメソッドと jQuery のようなチェインをサポートする、よく知られている jQuery ライブラリと同じ構文を持つため、非常に簡単です。

使い始めるには、Dom7 グローバルウィンドウ関数がありますが、$$ のようなより便利な名前のローカル変数に割り当てることをお勧めします。ただし、jQuery や Zepto のような他のライブラリとの競合を防ぐために "$" には割り当てないでください。

//Export DOM7 to local variable to make it easy accessible
var $$ = Dom7;

使用例

すでに知っているすべて

$$('.something').on('click', function (e) {
    $$(this).addClass('hello').attr('title', 'world').insertAfter('.something-else');
});

利用可能なメソッド

これらのメソッドはすべて、jQuery または Zepto とほぼ同じ方法で、同じ引数で動作します

$$(window).trigger('resize');
クラス
.addClass(className)要素にクラスを追加します
//Add "intro" class to all paragraphs
$$('p').addClass('intro');
.removeClass(className)指定したクラスを削除します
//Remove "big" class from all links with "big" class
$$('a.big').removeClass('big');
.hasClass(className)一致する要素のいずれかに、指定されたクラスが割り当てられているかどうかを判断します
<p class="intro">Lorem ipsum...</p>
$$('p').hasClass('intro'); //-> true
.toggleClass(className)一致する要素のセット内の各要素から、1つ以上のクラスを削除(クラスが存在する場合)または追加(存在しない場合)します
<!-- Before -->
<h1 class="small">This is first title</h1>
<h2>This is subtitle</h2>
$$('h1, h2').toggleClass('small');
<!-- After -->
<h1>This is first title</h1>
<h2 class="small">This is subtitle</h2>
属性とプロパティ
.prop(propName)プロパティ値を取得します
var isChecked = $$('input').prop('checked');
.prop(propName, propValue)単一のプロパティ値を設定します
//Make all checkboxes checked
$$('input[type="checkbox"]').prop('checked', true);
.prop(propertiesObject)複数のプロパティを設定します
$$('input').prop({
  checked: false,
  disabled: true
})
.attr(attrName)属性値を取得します
<a href="http://google.com">Google</a>
var link = $$('a').attr('href'); //-> http://google.com
.attr(attrName, attrValue)単一の属性値を設定します
//Set all links to google
$$('a').attr('href', 'http://google.com');
.attr(attributesObject)複数の属性を設定します
$$('a').attr({
  id: 'new-id',
  title: 'Link to Google',
  href: 'http://google.com'
})
.removeAttr(attrName)指定した属性を削除します
//Remove "src" attribute from all images
$$('img').removeAttr('src');
.val()一致する要素のセット内の最初の要素の現在の値を取得します
<input id="myInput" type="text" value="Lorem ipsum"/>
var inputVal = $$('#myInput').val(); //-> 'Lorem ipsum'
.val(newValue)一致するすべての要素の値を設定します
$$('input#myInput').val('New value here');
データストレージ
.data(key, value)一致する要素に関連付けられた任意のデータを保存します
$$('a').data('user', {
    id: '123',
    name: 'John',
    email: '[email protected]'
});
.data(key)data(key, value) または HTML5 data-* 属性によって設定された、コレクション内の最初の要素の名前付きデータストアの値を返します
var user = $$('a').data('user');
//-> {id: '123', name: 'John', email: '[email protected]'}

または

<p data-id="123">Lorem ipsum...</p>
var id = $$('p').data('id'); //-> 123
.removeData(key)指定したデータを削除します
$$('a').removeData('user')
データセット
.dataset()要素のデータセット(data- 属性のセット)をプレーンなオブジェクトとして返します
<div id="my-div" data-loop="true" data-animate-pages="false" data-index="0" data-hello="world">
    ...
</div>
var dataset = $$('#my-div').dataset();
/*
dataset will contain plain object with camelCase keys and with formatted boolean and number types:
{
    loop: true,
    animatePages: false,
    index: 0,
    hello: 'world'
}
*/
CSS トランスフォーム、トランジション
.transform(CSSTransformString)プレフィックス付きの CSS トランスフォームプロパティを追加します
$$('a').transform('rotate(90deg)')
.transition(transitionDuration)CSS transition-duration プロパティをコレクションに設定します
$$('p').transition(300)
イベント
.on(eventName, handler, useCapture)選択した要素に対して、1つ以上のイベントにイベントハンドラー関数を追加します。
$$('a').on('click', function (e) {
  console.log('clicked');
});
$$('input[type="text"]').on('keyup keydown change', function (e) {
  console.log('input value changed');
});
.on(eventName, delegatedTarget, handler, useCapture)ライブ/委任されたイベントハンドラー
$$(document).on('click', 'a', function (e) {
  console.log('link clicked');
});
.once(eventName, handler, useCapture)選択した要素に対して、1つ以上のイベントに、1回だけ実行されるイベントハンドラー関数を追加します
$$('a').once('click', function (e) {
  console.log('clicked');
});
$$('input[type="text"]').once('keyup keydown change', function (e) {
  console.log('input value changed');
});
.once(eventName, delegatedTarget, handler, useCapture)1回だけ実行されるライブ/委任されたイベントハンドラー
$$(document).once('click', 'a', function (e) {
  console.log('link clicked');
});
.off(eventName, handler, useCapture)イベントハンドラーを削除します
function clickHandler(){
    console.log('clicked');
}
// Add event listener
$$('a').on('click', clickHandler);
// Remove event listener
$$('a').off('click', clickHandler);
.off(eventName, delegatedTarget, handler, useCapture)ライブ/委任されたイベントハンドラーを削除します
function clickHandler(){
    console.log('clicked');
}
// Add event listener
$$(document).on('click', 'a', clickHandler);
// Remove event listener
$$(document).off('click', 'a', clickHandler);
.trigger(eventName, eventData)指定されたイベントに対して、一致する要素に追加されたすべてのハンドラーを実行します
.transitionStart(callback)プレフィックス付きの transitionStart イベントハンドラーをコレクションに追加します
.transitionEnd(callback, permanent)プレフィックス付きの transitionEnd イベントハンドラーをコレクションに追加します
$$('a').transitionEnd(function(){ /* do something */ })
.animationEnd(callback)プレフィックス付きの animationEnd イベントハンドラーをコレクションに追加します
$$('a').animationEnd(function(){ /* do something */ })
スタイル
.width()一致する要素のセット内の最初の要素の現在の計算された幅を取得します
var boxWidth = $$('div#box').width();
.outerWidth([includeMargin])一致する要素のセット内の最初の要素の現在の計算された幅を、padding と border を含み、margin を含む(includeMargin が true の場合)取得します
var outerWidth = $$('div#box').outerWidth(true);
.height()一致する要素のセット内の最初の要素の現在の計算された高さを取得します
var boxHeight = $$('div#box').height();
.outerHeight([includeMargin])一致する要素のセット内の最初の要素の現在の計算された高さを、padding と border を含み、margin を含む(includeMargin が true の場合)取得します
var outerHeight = $$('div#box').outerHeight(true);
.offset()ドキュメントに対する最初の要素の現在の座標を取得します
var coords = $$('.content').offset(); //-> {top: 100, left: 200}
var top = coords.top; //-> 100
var left = coords.left; //-> 200
.hide()一致する要素に "display:none" を設定します
//hide all paragraphs
$$('p').hide();
.show()一致する要素に "display:block" を設定します
//show all paragraphs
$$('p').show();
.css(property)最初の要素の指定した CSS プロパティの値を取得します
$$('.content').css('left'); //-> 200px
.css(property, value)一致する要素に指定した CSS プロパティを設定します
$$('.content').css('left', '100px');
.css(propertiesObject)一致する要素に複数の CSS プロパティを設定します
$$('a').css({
    left: '100px',
    top: '200px',
    color: 'red',
    width: '300px',
    marginLeft: '17px',
    'padding-right': '20px'
});
スクロール
.scrollTop()要素の scrollTop ポジションを取得します
.scrollTop(position, duration, callback)"duration" (ミリ秒単位) でアニメーションを伴う scrollTop "position" を設定します。 duration が指定されていない場合、スクロールトップポジションはすぐに設定されます。「callback」関数を指定した場合は、スクロールが完了した後に実行されます
.scrollLeft()要素の scrollLeft ポジションを取得します
.scrollLeft(position, duration, callback)"duration" (ミリ秒単位) でアニメーションを伴う scrollLeft "position" を設定します。 duration が指定されていない場合、スクロールレフトポジションはすぐに設定されます。「callback」関数を指定した場合は、スクロールが完了した後に実行されます
.scrollTo(left, top, duration, callback)"duration" (ミリ秒単位) でアニメーションを伴うスクロール左とスクロールトップを設定します。 duration が指定されていない場合、スクロールポジションはすぐに設定されます。「callback」関数を指定した場合は、スクロールが完了した後に実行されます
DOM 操作
.add(elements)一致する要素のセットに追加された要素を使用して、新しい Dom7 コレクションを作成します
var links = $$('a');
var divs = $$('div');
links.add('p').addClass('blue');
links.add(divs).addClass('red');
.each(callback)コレクションを反復処理し、一致する各要素に対してコールバック関数を実行します
.html()一致する要素のセット内の最初の要素の HTML コンテンツを取得します
.html(newInnerHTML)一致するすべての要素の HTML コンテンツを設定します
.text()一致する要素のセット内の最初の要素のテキストコンテンツを取得します
.text(newTextContent)一致するすべての要素のテキストコンテンツを設定します
.is(CSSSelector)現在の要素の一致セットを CSS セレクターに対してチェックします
.is(HTMLElement)現在の要素の一致セットを HTML 要素または Dom7 コレクションに対してチェックします
.index()Dom7 コレクション内の最初の要素の位置を、その兄弟要素に対して相対的に返します
.eq(index)一致する要素のセットを、指定されたインデックスの要素に縮小します
.append(HTMLString)パラメータで指定されたコンテンツを、一致する要素のセット内の各要素の末尾に挿入します
.append(HTMLElement)指定された HTML 要素を、一致する要素のセット内の要素の末尾に挿入します
.appendTo(HTMLElement)パラメータで指定された要素の末尾に、コンテンツ/要素を挿入します
.prepend(newHTML)パラメータで指定されたコンテンツを、一致する要素のセット内の各要素の先頭に挿入します
.prepend(HTMLElement)指定された HTML 要素を、一致する要素のセット内の要素の先頭に挿入します
.prependTo(HTMLElement)パラメータで指定された要素の先頭に、コンテンツ/要素を挿入します
.insertBefore(target)一致する要素のセット内のすべての要素を、ターゲットの前に挿入します。ターゲットは、CSS セレクター、HTML 要素、または Dom7 コレクションとして指定できます
.insertAfter(target)一致する要素のセット内のすべての要素を、ターゲットの後に挿入します。ターゲットは、CSS セレクター、HTML 要素、または Dom7 コレクションとして指定できます
.next([セレクター])マッチした要素セット内の各要素の直後の兄弟要素を取得します。セレクターが指定された場合、そのセレクターに一致する場合にのみ次の兄弟要素を取得します。
.nextAll([セレクター])マッチした要素セット内の各要素のすべての後続の兄弟要素を取得します。オプションでセレクターでフィルタリングできます。
.prev([セレクター])マッチした要素セット内の各要素の直前の兄弟要素を取得します。オプションでセレクターでフィルタリングできます。
.prevAll([セレクター])マッチした要素セット内の各要素のすべての先行の兄弟要素を取得します。オプションでセレクターでフィルタリングできます。
.siblings([セレクター])マッチした要素セット内の各要素の兄弟要素を取得します。オプションでセレクターでフィルタリングできます。
.parent([セレクター])マッチした要素の現在のセット内の各要素の最初の親要素を取得します。オプションでセレクターでフィルタリングできます。
.parents([セレクター])マッチした要素の現在のセット内の各要素の祖先要素を取得します。オプションでセレクターでフィルタリングできます。
.closest([セレクター])セット内の各要素について、要素自体をテストし、DOMツリー内の祖先をたどることによって、セレクターに一致する最初の要素を取得します。
.find(セレクター)マッチした要素の現在のセット内の各要素の子孫要素を取得します。セレクターでフィルタリングされます。
.children(セレクター)マッチした要素セット内の各要素の子要素を取得します。オプションでセレクターでフィルタリングできます。
.filter(コールバック)要素のコレクションをフィルタリングします。
var redLinks = $$('a').filter(function(el, index) {
    return $$(this).hasClass('red');
})
.remove()マッチした要素をDOMから削除/切り離します。
.empty()マッチした要素セットのすべての子ノードをDOMから削除します。.html('') のエイリアス。
ショートカット
.click()コレクションで「click」イベントをトリガーします。
.click(ハンドラー)コレクションに「click」イベントハンドラーを追加します。
.blur()コレクションで「blur」イベントをトリガーします。
.blur(ハンドラー)コレクションに「blur」イベントハンドラーを追加します。
.focus()コレクションで「focus」イベントをトリガーします。
.focus(ハンドラー)コレクションに「focus」イベントハンドラーを追加します。
.focusin()コレクションで「focusin」イベントをトリガーします。
.focusin(ハンドラー)コレクションに「focusin」イベントハンドラーを追加します。
.focusout()コレクションで「focusout」イベントをトリガーします。
.focusout(ハンドラー)コレクションに「focusout」イベントハンドラーを追加します。
.keyup()コレクションで「keyup」イベントをトリガーします。
.keyup(ハンドラー)コレクションに「keyup」イベントハンドラーを追加します。
.keydown()コレクションで「keydown」イベントをトリガーします。
.keydown(ハンドラー)コレクションに「keydown」イベントハンドラーを追加します。
.keypress()コレクションで「keypress」イベントをトリガーします。
.keypress(ハンドラー)コレクションに「keypress」イベントハンドラーを追加します。
.submit()コレクションで「submit」イベントをトリガーします。
.submit(ハンドラー)コレクションに「submit」イベントハンドラーを追加します。
.change()コレクションで「change」イベントをトリガーします。
.change(ハンドラー)コレクションに「change」イベントハンドラーを追加します。
.mousedown()コレクションで「mousedown」イベントをトリガーします。
.mousedown(ハンドラー)コレクションに「mousedown」イベントハンドラーを追加します。
.mousemove()コレクションで「mousemove」イベントをトリガーします。
.mousemove(ハンドラー)コレクションに「mousemove」イベントハンドラーを追加します。
.mouseup()コレクションで「mouseup」イベントをトリガーします。
.mouseup(ハンドラー)コレクションに「mouseup」イベントハンドラーを追加します。
.mouseenter()コレクションで「mouseenter」イベントをトリガーします。
.mouseenter(ハンドラー)コレクションに「mouseenter」イベントハンドラーを追加します。
.mouseleave()コレクションで「mouseleave」イベントをトリガーします。
.mouseleave(ハンドラー)コレクションに「mouseleave」イベントハンドラーを追加します。
.mouseout()コレクションで「mouseout」イベントをトリガーします。
.mouseout(ハンドラー)コレクションに「mouseout」イベントハンドラーを追加します。
.mouseover()コレクションで「mouseover」イベントをトリガーします。
.mouseover(ハンドラー)コレクションに「mouseover」イベントハンドラーを追加します。
.touchstart()コレクションで「touchstart」イベントをトリガーします。
.touchstart(ハンドラー)コレクションに「touchstart」イベントハンドラーを追加します。
.touchend()コレクションで「touchend」イベントをトリガーします。
.touchend(ハンドラー)コレクションに「touchend」イベントハンドラーを追加します。
.touchmove()コレクションで「touchmove」イベントをトリガーします。
.touchmove(ハンドラー)コレクションに「touchmove」イベントハンドラーを追加します。
.resize(ハンドラー)コレクションに「resize」イベントハンドラーを追加します。
.scroll(ハンドラー)コレクションに「scroll」イベントハンドラーを追加します。

アニメーション

.animate(プロパティ, パラメーター)- CSSプロパティのセットのカスタムアニメーションを実行します。

  • プロパティ - オブジェクト - アニメーションするCSSプロパティ
  • パラメーター - オブジェクト - アニメーションパラメーター

Dom7コレクションを返します

$$('#animate-me').animate(
    /* CSS properties to animate, e.g.: */
    {
        'margin-left': 100,
        'width': 200,
        'height': 300,
        'opacity': 0.5
    },
    /* Animation parameters */
    {
        // Animation duration in ms, optional (default to 300)
        duration: 300,
        // Animation easing, optional (default to 'swing'), can be also 'linear'
        easing: 'swing',
        /* Callbacks */
        // Animation begins, optional
        begin: function (elements) {
            console.log('animation began');
        },
        // Animation completed, optional
        complete: function (elements) {
            console.log('animation completed');
        },
        // Animation in progress, optional
        progress: function (elements, complete, remaining, start) {
            /* Where
            complete - The call's completion percentage (as a decimal value)
            remaining - How much time remains until the call completes (in ms)
            start - The absolute time at which the call began (in ms)
            */
            console.log('animation in progress');
        }
    }
);

チェーン処理もサポートしています。

$$('#animate-me')
    .animate(
        {
            'margin-left': 100,
            'width': 200,
            'height': 300,
            'opacity': 0.5
        }
    )
    .animate(
        {
            'width': 50,
            'height': 50
        }
    );