Dom7 - 自訂 DOM 函式庫

Framework7 沒有使用任何第三方函式庫,即使是針對 DOM 操作。它有自己的自訂 DOM7 - DOM 函式庫,利用大多數邊緣和高性能的方法進行 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)移除(如果類別存在)或新增(如果不存在)一個或多個類別至符合元素組中的每個元素
<!-- 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)將事件處理函式新增到一個或多個事件,以選取元素。
$$('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)將事件處理函式新增到一個或多個事件,以選取元素,這些事件只會執行一次
$$('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)即時/委派事件處理函式,只會執行一次
$$(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])取得第一個匹配元素的目前計算寬度,包含內邊距、邊框和外邊距(如果 includeMargin 為 true
var outerWidth = $$('div#box').outerWidth(true);
.height()取得第一個匹配元素的目前計算高度
var boxHeight = $$('div#box').height();
.outerHeight([includeMargin])取得第一個匹配元素的目前計算高度,包含內邊距、邊框和外邊距(如果 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)遍歷集合,為每個匹配元素執行 callback 函式
.html()取得第一個匹配元素的 HTML 內容
.html(newInnerHTML)設定每個匹配元素的 HTML 內容
.text()取得第一個匹配元素的文字內容
.text(newTextContent)設定每個匹配元素的文字內容
.is(CSSSelector)根據 CSS 選擇器檢查目前匹配的元素集合
.is(HTMLElement)根據 HTML 元素或 Dom7 集合檢查目前匹配的元素集合
.index()傳回第一個元素在 Dom7 集合中相對於其同層元素的位置
.eq(索引)將匹配的元素組縮減至指定索引位置的元素
.append(HTML字串)將由參數指定的內容插入至匹配的元素組中每個元素的結尾
.append(HTML元素)將指定的 HTML 元素插入至匹配的元素組中每個元素的結尾
.appendTo(HTML元素)將內容/元素插入至參數中指定的元素結尾
.prepend(新HTML)將由參數指定的內容插入至匹配的元素組中每個元素的開頭
.prepend(HTML元素)將指定的 HTML 元素插入至匹配的元素組中每個元素的開頭
.prependTo(HTML元素)將內容/元素插入至參數中指定的元素開頭
.insertBefore(目標)將匹配的元素組中的每個元素插入至目標之前。目標可以指定為 CSS 選擇器、HTML 元素或 Dom7 集合
.insertAfter(目標)將匹配的元素組中的每個元素插入至目標之後。目標可以指定為 CSS 選擇器、HTML 元素或 Dom7 集合
.next([選擇器])取得匹配的元素組中每個元素的緊鄰後一個同層元素。如果提供了選擇器,則僅當後一個同層元素符合該選擇器時才會擷取
.nextAll([選擇器])取得匹配的元素組中每個元素的所有後一個同層元素,可選擇使用選擇器進行篩選
.prev([選擇器])取得匹配的元素組中每個元素的緊鄰前一個同層元素,可選擇使用選擇器進行篩選
.prevAll([選擇器])取得匹配的元素組中每個元素的所有前一個同層元素,可選擇使用選擇器進行篩選
.siblings([選擇器])取得匹配的元素組中每個元素的同層元素,可選擇使用選擇器進行篩選
.parent([選擇器])取得匹配的元素組中每個元素的第一個父元素,可選擇使用選擇器進行篩選
.parents([選擇器])取得匹配的元素組中每個元素的所有祖先元素,可選擇使用選擇器進行篩選
.closest([選擇器])對於組中的每個元素,透過測試元素本身並向上遍歷其在 DOM 樹中的祖先元素,取得第一個符合選擇器的元素
.find(選擇器)取得目前相符元素集合中每個元素的後代元素,並依選取器過濾
.children(selector)取得相符元素集合中每個元素的子元素,可選擇依選取器過濾
.filter(callback)過濾元素集合
var redLinks = $$('a').filter(function(el, index) {
    return $$(this).hasClass('red');
})
.remove()從 Dom 中移除/分離相符元素
.empty()從 DOM 中移除相符元素集合的所有子節點。.html('') 的別名
捷徑
.click()觸發集合上的「click」事件
.click(handler)將「click」事件處理常式新增至集合
.blur()觸發集合上的「blur」事件
.blur(handler)將「blur」事件處理常式新增至集合
.focus()觸發集合上的「focus」事件
.focus(handler)將「focus」事件處理常式新增至集合
.focusin()觸發集合上的「focusin」事件
.focusin(handler)將「focusin」事件處理常式新增至集合
.focusout()觸發集合上的「focusout」事件
.focusout(handler)將「focusout」事件處理常式新增至集合
.keyup()觸發集合上的「keyup」事件
.keyup(handler)將「keyup」事件處理常式新增至集合
.keydown()觸發集合上的「keydown」事件
.keydown(handler)將「keydown」事件處理常式新增至集合
.keypress()觸發集合上的「keypress」事件
.keypress(handler)將「keypress」事件處理常式新增至集合
.submit()觸發集合上的「submit」事件
.submit(handler)將「submit」事件處理常式新增至集合
.change()觸發集合上的「change」事件
.change(handler)將「change」事件處理常式新增至集合
.mousedown()觸發集合上的「mousedown」事件
.mousedown(handler)將「mousedown」事件處理常式新增至集合
.mousemove()觸發集合上的「mousemove」事件
.mousemove(handler)將「mousemove」事件處理常式新增至集合
.mouseup()觸發集合上的「mouseup」事件
.mouseup(handler)將「mouseup」事件處理常式新增至集合
.mouseenter()觸發集合上的「mouseenter」事件
.mouseenter(handler)將「mouseenter」事件處理常式新增至集合
.mouseleave()觸發集合上的「mouseleave」事件
.mouseleave(handler)將「mouseleave」事件處理常式新增至集合
.mouseout()觸發集合上的「mouseout」事件
.mouseout(handler)將「mouseout」事件處理常式新增至集合
.mouseover()觸發集合上的「mouseover」事件
.mouseover(handler)將「mouseover」事件處理常式新增至集合
.touchstart()在集合上觸發「touchstart」事件
.touchstart(handler)將「touchstart」事件處理常式新增至集合
.touchend()在集合上觸發「touchend」事件
.touchend(handler)將「touchend」事件處理常式新增至集合
.touchmove()在集合上觸發「touchmove」事件
.touchmove(handler)將「touchmove」事件處理常式新增至集合
.resize(handler)將「resize」事件處理常式新增至集合
.scroll(handler)將「scroll」事件處理常式新增至集合

動畫

.animate(properties, parameters)- 執行一組 CSS 屬性的自訂動畫

  • properties - object - 要動畫化的 CSS 屬性
  • parameters - object - 動畫參數

傳回 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
        }
    );