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) | 向元素添加类
|
.removeClass(className) | 移除指定的类
|
.hasClass(className) | 确定匹配的元素中是否有任何元素分配了给定的类
|
.toggleClass(className) | 从匹配元素集合中的每个元素移除(如果类存在)或添加(如果不存在)一个或多个类
|
属性 | |
.prop(propName) | 获取属性值
|
.prop(propName, propValue) | 设置单个属性值
|
.prop(propertiesObject) | 设置多个属性
|
.attr(attrName) | 获取属性值
|
.attr(attrName, attrValue) | 设置单个属性值
|
.attr(attributesObject) | 设置多个属性
|
.removeAttr(attrName) | 移除指定的属性
|
.val() | 获取匹配元素集合中第一个元素的当前值
|
.val(newValue) | 设置每个匹配元素的值
|
数据存储 | |
.data(key, value) | 存储与匹配元素关联的任意数据
|
.data(key) | 返回集合中第一个元素在指定数据存储中的值,该值由 data(key, value) 或 HTML5 data-* 属性设置
或
|
.removeData(key) | 移除指定的数据
|
数据集 | |
.dataset() | 以普通对象的形式返回元素的数据集(一组 data- 属性)
|
CSS 变换,过渡 | |
.transform(CSSTransformString) | 添加带前缀的 CSS transform 属性
|
.transition(transitionDuration) | 为集合设置 CSS transition-duration 属性
|
事件 | |
.on(eventName, handler, useCapture) | 将事件处理函数添加到所选元素的一个或多个事件中。
|
.on(eventName, delegatedTarget, handler, useCapture) | 实时/委托事件处理程序
|
.once(eventName, handler, useCapture) | 为所选元素的一个或多个事件添加事件处理函数,该函数只会被执行一次。
|
.once(eventName, delegatedTarget, handler, useCapture) | 只会被执行一次的实时/委托事件处理程序。
|
.off(eventName, handler, useCapture) | 移除事件处理程序。
|
.off(eventName, delegatedTarget, handler, useCapture) | 移除实时/委托事件处理程序。
|
.trigger(eventName, eventData) | 对匹配元素执行为指定事件添加的所有处理程序。 |
.transitionStart(callback) | 将带有浏览器前缀的 transitionStart 事件处理程序添加到集合中。 |
.transitionEnd(callback, permanent) | 将带有浏览器前缀的 transitionEnd 事件处理程序添加到集合中。
|
.animationEnd(callback) | 将带有浏览器前缀的 animationEnd 事件处理程序添加到集合中。
|
样式 | |
.width() | 获取匹配元素集合中第一个元素的当前计算宽度。
|
.outerWidth([includeMargin]) | 获取匹配元素集合中第一个元素的当前计算宽度,包括内边距、边框,以及外边距(如果 includeMargin 为 true)。
|
.height() | 获取匹配元素集合中第一个元素的当前计算高度。
|
.outerHeight([includeMargin]) | 获取匹配元素集合中第一个元素的当前计算高度,包括内边距、边框,以及外边距(如果 includeMargin 为 true)。
|
.offset() | 获取第一个元素相对于文档的当前坐标。
|
.hide() | 将匹配元素的样式设置为 "display:none"。
|
.show() | 将匹配元素的样式设置为 "display:block"。
|
.css(property) | 获取第一个元素指定 CSS 属性的值。
|
.css(property, value) | 设置匹配元素的指定 CSS 属性。
|
.css(propertiesObject) | 为匹配元素设置多个 CSS 属性。
|
滚动 | |
.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 集合,并将元素添加到匹配元素集中
|
.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(回调函数) | 过滤元素集合
|
.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
}
);