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 transform 属性
$$('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,则立即设置 scrollTop 位置。如果指定了 "callback" 函数,则在滚动完成后执行该函数。
.scrollLeft()获取元素的 scrollLeft 位置。
.scrollLeft(position, duration, callback)在 "duration"(以毫秒为单位)时间内以动画方式设置 scrollLeft "position"。如果没有指定 duration,则立即设置 scrollLeft 位置。如果指定了 "callback" 函数,则在滚动完成后执行该函数。
.scrollTo(left, top, duration, callback)在“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([selector])获取匹配元素集中每个元素的下一个兄弟元素。如果提供了选择器,则仅当下一个兄弟元素与该选择器匹配时才检索它
.nextAll([selector])获取匹配元素集中每个元素的所有后续兄弟元素,可以选择使用选择器进行过滤
.prev([selector])获取匹配元素集中每个元素的前一个兄弟元素,可以选择使用选择器进行过滤
.prevAll([selector])获取匹配元素集合中每个元素的所有前面的兄弟元素,可以选择使用选择器进行过滤
.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(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 - 对象 - 要进行动画处理的 CSS 属性
  • parameters - 对象 - 动画参数

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