Dom7 - 自定义DOM库

Framework7不使用任何第三方库,即使是用于DOM操作。它有自己的自定义DOM7 - DOM库,该库利用了大多数边缘和高性能的DOM操作方法。你不需要学习新东西,它的使用非常简单,因为它具有与众所周知的jQuery库相同的语法,并支持最流行和广泛使用的方法和jQuery式的链式调用。

要开始使用它,有一个Dom7全局window函数,但我们建议将其分配给一个具有更方便名称的局部变量,如$$,但不为"$"以防止与其他库(如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, )存储与匹配元素关联的任意数据
$$('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()返回元素的 dataSet(数据-属性集)作为普通对象
<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, 处理程序, 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, 处理程序, useCapture)活动委托事件处理程序
$$(document).on('click', 'a', function (e) {
  console.log('link clicked');
});
.once(eventName, 处理程序, 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, 处理程序, useCapture)活动委托事件处理程序,该程序只执行一次
$$(document).once('click', 'a', function (e) {
  console.log('link clicked');
});
.off(eventName, 处理程序, useCapture)移除事件处理程序
function clickHandler(){
    console.log('clicked');
}
// Add event listener
$$('a').on('click', clickHandler);
// Remove event listener
$$('a').off('click', clickHandler);
.off(eventName, delegatedTarget, 处理程序, 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(回调)为集合添加带前缀的transitionStart事件处理程序
.transitionEnd(回调, permanent)为集合添加带前缀的transitionEnd事件处理程序:
$$('a').transitionEnd(function(){ /* do something */ })
.animationEnd(回调)为集合添加带前缀的animationEnd事件处理程序:
$$('a').animationEnd(function(){ /* do something */ })
样式
.width()获取匹配元素集中第一个元素当前的计算宽度
var boxWidth = $$('div#box').width();
.outerWidth([includeMargin])获取匹配元素集中第一个元素当前的计算宽度,包括填充和边框,以及margin(如果includeMargin是true)
var outerWidth = $$('div#box').outerWidth(true);
.height()获取匹配元素集中第一个元素当前的计算高度
var boxHeight = $$('div#box').height();
.outerHeight([includeMargin])获取匹配元素集中第一个元素当前的计算高度,包括填充和边框,以及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(属性加载,则无法正常工作)获取第一个元素的指定CSS属性的值:
$$('.content').css('left'); //-> 200px
.css(属性加载,则无法正常工作, )将指定的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(位置, 持续时间, 回调)在"duration"(以毫秒为单位)期间使用动画设置scrollTop"位置"。如果未指定duration,则将立即设置滚动顶位置。如果您指定了"callback"函数,则它将在滚动完成后执行
.scrollLeft()获取元素scrollLeft位置
.scrollLeft(位置, 持续时间, 回调)在"duration"(以毫秒为单位)期间使用动画设置scrollLeft"位置"。如果未指定duration,则将立即设置滚动左位置。如果您指定了"callback"函数,则它将在滚动完成后执行
.scrollTo(, 顶部, 持续时间, 回调)在"duration"(以毫秒为单位)期间使用动画设置滚动左和滚动顶位置。如果未指定duration,则将立即设置滚动位置。如果您指定了"callback"函数,则它将在滚动完成后执行
DOM操作
.add(elements)使用添加到匹配元素集中的元素创建一个新的Dom7集合:
var links = $$('a');
var divs = $$('div');
links.add('p').addClass('blue');
links.add(divs).addClass('red');
.each(回调)遍历集合,为每个匹配的元素执行回调函数
.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([selector])获取匹配元素集中每个元素的下一个同级元素。如果提供了选择器,则仅检索与该选择器匹配的下一个同级元素
.nextAll([selector])获取匹配元素集中每个元素的所有后续同级元素,可选地通过选择器进行过滤
.prev([selector])获取匹配元素集中每个元素的下一个同级元素,可选地通过选择器进行过滤
.prevAll([selector])获取匹配元素集中每个元素的所有前序同级元素,可选地通过选择器进行过滤
.siblings([selector])获取匹配元素集中每个元素的兄弟元素,可选地通过选择器进行过滤
.parent([selector])获取当前匹配元素集中的每个元素的第一个父元素,可选地通过选择器进行过滤
.parents([selector])获取当前匹配元素集中每个元素的祖先元素,可选地通过选择器进行过滤
.closest([selector])对于集合中的每个元素,通过测试元素本身并通过遍历DOM树中的其祖先来获取第一个匹配选择器的元素
.find(selector)获取当前匹配元素集中每个元素的子孙元素,通过选择器进行过滤
.children(selector)获取匹配元素集中每个元素的子元素,可选地通过选择器进行过滤
.filter(回调)过滤元素集合
var redLinks = $$('a').filter(function(el, index) {
    return $$(this).hasClass('red');
})
.remove()从Dom中移除/分离匹配的元素
.empty()从匹配元素集中删除所有子节点。的别名.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
        }
    );