返回 导航

HTML5 / CSS3

hangge.com

Framework7 - DOM7库的使用1(基本的DOM操作)

作者:hangge | 2016-08-07 12:10

1,DOM7介绍
过去我们操作 DOM 元素时,常常会使用 jQuery 这样的JS库。
Framework7 自身就带了一个高性能的DOM操作库:DOM7。它有如下特点:
(1)集成了大部分常用 DOM 操作。
(2)不需要学习任何新的东西,因为它的用法和大名鼎鼎的 jQuery 几乎是一样的,包括大部分常用的方法和 jQuery 风格的链式调用。

2,一个简单的样例
(1)我们有一个全局的 Dom7 对象,为了便于使用,我们将其存储到一个局部变量中。为了防止和其他库冲突(比如jQuery),我们推荐使用 $$ 来代替 $
var $$ = Dom7;
(2)下面样例是点击具有 something 样式的对象时会触发相关的操作。
$$('.something').on('click', function (e) {
    $$(this).addClass('hello').attr('title', 'world').insertAfter('.something-else');
});

3,常用的方法
从下表可以发现,这些方法几乎都和 jQuery/Zepto 是一样的。
Classes
.addClass(className) 给元素增加class
//Add "intro" class to all paragraphs
$$('p').addClass('intro');
.removeClass(className) 删除指定的class
//Add "big" class from all links with "big" class
$$('a.big').removeClass('big');
.hasClass(className) 元素上是否有指定的class:
<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(propNamepropValue) 设置一个属性值:
//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(attrNameattrValue) 设置一个属性值:
//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 storage
.data(keyvalue) 在选中的元素上存储任意数据
$$('a').data('user', {
    id: '123',
    name: 'John',
    email: 'john@doe.com'
});  
.data(key) 如果只有一个参数,则读取指定的值,如果有两个参数 data(key, value) 则是设置值,
也可以通过 HTML5 data-* 属性来设置。
var user = $$('a').data('user'); 
//-> {id: '123', name: 'John', email: 'john@doe.com'}

or

<p data-id="123">Lorem ipsum...</p>
var id = $$('p').data('id'); //-> 123
.removeData(key) 删除指定数据
$$('a').removeData('user')
Data Set
.dataset() 获取元素的数值,放到一个对象中
<div id="my-div" 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:
{
    animatePages: false,
    index: 0,
    hello: 'world'
}
*/
CSS transform, transitions
.transform(CSSTransformString) 添加带前缀的transform 样式:
$$('a').transform('rotate(90deg)')
.transition(transitionDuration) 设置css transition-duration 属性
$$('p').transition(300)
Events
.on(eventNamehandler,useCapture) 在选中的元素上绑定事件
$$('a').on('click', function (e) { 
  console.log('clicked'); 
});
$$('input[type="text"]').on('keyup keydown change', function (e) { 
  console.log('input value changed'); 
});
.on(eventNamedelegatedTarget,handleruseCapture) 通过代理绑定事件
$$(document).on('click', 'a', function (e) { 
  console.log('link clicked'); 
});
.once(eventNamehandler,useCapture) 为选中的元素绑定执行一次的事件
$$('a').once('click', function (e) { 
  console.log('clicked'); 
});
$$('input[type="text"]').once('keyup keydown change', function (e) { 
  console.log('input value changed'); 
});
.once(eventNamedelegatedTarget,handleruseCapture) 通过代理绑定执行一次的事件
$$(document).once('click', 'a', function (e) { 
  console.log('link clicked'); 
});
.off(eventNamehandler,useCapture) 移除事件绑定
function clickHandler(){
    console.log('clicked');
}
// Add event listener
$$('a').on('click', clickHandler);
// Remove event listener
$$('a').off('click', clickHandler);                  
.off(eventNamedelegatedTarget,handleruseCapture) 移除通过代理绑定的事件
function clickHandler(){
    console.log('clicked');
}
// Add event listener
$$(document).on('click', 'a', clickHandler);
// Remove event listener
$$(document).off('click', 'a', clickHandler);
.trigger(eventNameeventData) 触发选中元素上的事件,指定所有的事件回调函数
.transitionEnd(callback,permanent) 在选中的元素上增加 transitionEnd 事件回调
$$('a').transitionEnd(function(){ /* do something */ })
.animationEnd(callback) 在选中的元素上增加 animationEnd 事件回调
$$('a').animationEnd(function(){ /* do something */ })
Styles
.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() 获取当前选中元素的第一个元素相对 document 的位置偏移
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(propertyvalue) 设置全部选中元素中的CSS属性值
$$('.content').css('left', '100px');
.css(propertiesObject) 设置全部选中元素中的多个CSS属性值
$$('a').css({
    left: '100px',
    top: '200px',
    color: 'red',
    width: '300px',
    marginLeft: '17px',
    'padding-right': '20px'
});
Scroll
.scrollTop() 获取选中元素的 scrollTop 值
.scrollTop(position, duration, callback) 在指定时间(duration)内滚动到指定位置(position)。如果时间(duration没有定义),则立刻滚动到指定位置。如果你指定了回调函数,那么他会在滚动完成后执行。
.scrollLeft() 获取选中元素的 scrollLeft 值
.scrollLeft(position, duration, callback) 在指定的时间(duration 毫秒)内滚动到指定的位置(scrollLeft)。如果没有指定时间则立刻滚动到指定位置。如果你指定了回调函数,那么他会在动画完成后执行。
.scrollTo(left, top, duration, callback) 在指定的时间(duration 毫秒)内滚动到指定的位置(scrollLeft, scrollTop)。如果没有指定时间则立刻滚动到指定位置。如果你指定了回调函数,那么他会在动画完成后执行。
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) 选中的元素是否是给定的 DOM 元素或者 Dom7 集合
.index() 当前选中的第一个元素在他的所有兄弟节点中的排序
.eq(index) 返回当前选中的元素中的指定序号的元素
.append(HTMLString) 在当前选中元素的每一个后面插入指定内容
.append(HTMLElement) 在当前选中元素的每一个后面插入指定元素
.appendTo(HTMLElement) 在当前选中元的后面插入指定元素
.prepend(newHTML) 在当前选中元素的每一个前面插入指定内容
.prepend(HTMLElement) 在当前选中元素的每一个前面插入指定元素
.prependTo(HTMLElement) 在当前选中元的前面插入指定元素
.insertBefore(target) 把当前选中的每一个元素插入到指定的目标之前。目标(target)应该是一个 CSS 选择器或者 HTML 元素 或者 Dom7集合
.insertAfter(target) 把当前选中的每一个元素插入到指定的目标之后。目标(target)应该是一个 CSS 选择器或者 HTML 元素 或者 Dom7集合
.next([selector]) 获得当前选中的每一个元素的下一个直接兄弟元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些兄弟元素。
.nextAll([selector]) 获得当前选中的每一个元素之后的全部兄弟元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些兄弟元素。
.prev([selector]) 获得当前选中的每一个元素的上一个直接兄弟元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些兄弟元素。
.prevAll([selector]) 获得当前选中的每一个元素之前的全部兄弟元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些兄弟元素。
.parent([selector]) 获取选中的每一个元素的父元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些父元素。
.parents([selector]) 获取选中的每一个元素的祖先元素。如果提供了一个选择器(selector),那么会用这个选择器来过滤这些祖先元素。
.find(selector) 在选中的每一个元素的后代中查找指定的元素。
.children(selector) 在选中的每一个元素的直接孩子中查找指定的元素。
.filter(callback) 从集合中过滤元素
var redLinks = $$('a').filter(function(index, el) {
    return $$(this).hasClass('red');
})                  
.remove() 从DOM中删除选中的元素
快捷方式
.click() 触发选中元素上的"click"事件
.click(handler) 为选中的元素绑定"click"事件
.blur() Trigger "blur" event on collection
.blur(handler) Add "blur" event handler to collection
.focus() Trigger "focus" event on collection
.focus(handler) Add "focus" event handler to collection
.focusin() Trigger "focusin" event on collection
.focusin(handler) Add "focusin" event handler to collection
.focusout() Trigger "focusout" event on collection
.focusout(handler) Add "focusout" event handler to collection
.keyup() Trigger "keyup" event on collection
.keyup(handler) Add "keyup" event handler to collection
.keydown() Trigger "keydown" event on collection
.keydown(handler) Add "keydown" event handler to collection
.keypress() Trigger "keypress" event on collection
.keypress(handler) Add "keypress" event handler to collection
.submit() Trigger "submit" event on collection
.submit(handler) Add "submit" event handler to collection
.change() Trigger "change" event on collection
.change(handler) Add "change" event handler to collection
.mousedown() Trigger "mousedown" event on collection
.mousedown(handler) Add "mousedown" event handler to collection
.mousemove() Trigger "mousemove" event on collection
.mousemove(handler) Add "mousemove" event handler to collection
.mouseup() Trigger "mouseup" event on collection
.mouseup(handler) Add "mouseup" event handler to collection
.mouseenter() Trigger "mouseenter" event on collection
.mouseenter(handler) Add "mouseenter" event handler to collection
.mouseleave() Trigger "mouseleave" event on collection
.mouseleave(handler) Add "mouseleave" event handler to collection
.mouseout() Trigger "mouseout" event on collection
.mouseout(handler) Add "mouseout" event handler to collection
.mouseover() Trigger "mouseover" event on collection
.mouseover(handler) Add "mouseover" event handler to collection
.touchstart() Trigger "touchstart" event on collection
.touchstart(handler) Add "touchstart" event handler to collection
.touchend() Trigger "touchend" event on collection
.touchend(handler) Add "touchend" event handler to collection
.touchmove() Trigger "touchmove" event on collection
.touchmove(handler) Add "touchmove" event handler to collection
.resize(handler) Add "resize" event handler to collection
.scroll(handler) Add "scroll" event handler to collection

评论

全部评论(0)

回到顶部