<script src="https://cdn.jsdelivr.net/gh/yaohaixiao/dom.js/dom.min.js"></script>

Attributes

dom.js 提供以下方法来获取和设置元素的 DOM 属性。

hasClass(el, className)

Category:
Attributes

hasClass() 方法用来判断 DOM 元素是否包含指定 className 的样式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要检测 class 样式的 DOM 元素。

className
Type:
String

(必须)className 要添加的 class 样式名称。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import hasClass from '@yaohaixiao/dom.js/addClass'

const $list = DOM.byId('#list')

// 添加 class 样式
DOM.addClass($list, 'nav')
DOM.addClass($list, 'primary')

// 判断是否存在 class 样式
DOM.hasClass($list, 'nav') => true
hasClass($list, 'primary') => true
hasClass($list, 'top-menu') => false

addClass(el, className)

Category:
Attributes

addClass() 方法用来给 DOM 元素添加 class 样式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要添加 class 样式的 DOM 元素。

className
Type:
String

(必须)className 参数指定要检测的 class 样式名称。

Returns
Type:
Boolean

如果 el 元素包含 className 的 class 样式,则返回 true,否则返回 false。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import hasClass from '@yaohaixiao/dom.js/addClass'

const $list = DOM.byId('#list')

// 添加 class 样式
DOM.addClass($list, 'nav')
DOM.addClass($list, 'primary')

// 判断是否存在 class 样式
DOM.hasClass($list, 'nav') => true
hasClass($list, 'primary') => true
hasClass($list, 'top-menu') => false

replaceClass(el, oldCls, newCls)

Category:
Attributes

replaceClass() 方法用来替换 DOM 元素中的 className 的样式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要替换 class 样式的 DOM 元素。

oldCls
Type:
String

(必须)oldCls 要替换的 class 样式名称。

newCls
Type:
String

(必须)newCls 用来替换的 class 样式名称。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import replaceClass from '@yaohaixiao/dom.js/removeClass'

const $list = DOM.byId('#list')

// 添加 class 样式
DOM.addClass($list, 'nav')

// 判断是否存在 class 样式
DOM.replaceClass($list, 'nav', 'main')

hasClass($list, 'list') => true
hasClass($list, 'nav') => false
hasClass($list, 'main') => true

removeClass(el, className)

Category:
Attributes

removeClass() 方法用来移除 DOM 元素中的 className 的样式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要移除 class 样式的 DOM 元素。

className
Type:
String

(必须)className 参数指定要移除的 class 样式名称。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import removeClass from '@yaohaixiao/dom.js/removeClass'

const $list = DOM.byId('#list')

// 添加 class 样式
DOM.addClass($list, 'nav')
DOM.addClass($list, 'primary')

// 判断是否存在 class 样式
DOM.removeClass($list, 'nav') => true
removeClass($list, 'primary')

hasClass($list, 'list') => true
hasClass($list, 'nav') => false
hasClass($list, 'primary') => false

toggleClass(el, className)

Category:
Attributes

toggleClass() 方法用来切换(添加或删除) DOM 元素中的 className 的样式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要切换 class 样式的 DOM 元素。

className
Type:
String

(必须)className 参数指定要切换的样式名称。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import hasClass from '@yaohaixiao/dom.js/addClass'
import toggleClass from '@yaohaixiao/dom.js/toggleClass'

const $active = document.querySelector('.active')

// 添加 class 样式
hasClass($active, 'active') // -> true

// 判断是否存在 class 样式
DOM.toggleClass($active, 'active')
hasClass($active, 'active') // -> false

// 判断是否存在 class 样式
toggleClass($active, 'active')
hasClass($active, 'active') // -> true

getAttribute(el, attr)

Category:
Attributes

getAttribute() 方法用来获取 DOM 元素的 DOM 属性值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attr
Type:
String

(必须)attr 参数指定要获取的属性名称。

Returns
Type:
Any

返回指定的属性值。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getAttribute 单个方法
import getAttribute from '@yaohaixiao/dom.js/getAttribute'

const $list = byId('#list')

getAttribute($list, 'id') // -> 'list'
// 针对 className 属性获取样式属性
DOM.getAttribute($list, 'className') // -> 'list'

DOM.addClass($list, 'nav')
// 也可以直接实用 class 属性,因为在获取属性时,class 不存在 JS 的保留关键字的限制
DOM.getAttribute($list, 'class') // -> 'list nav'

getAttributes(el, props)

Category:
Attributes

getAttribute() 方法用来获取 DOM 元素的单个或多个 HTML 属性值(键/值对象)。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

props
Type:
Array

(可选)props 参数指定要获取的属性名称的数组,不指定则获取全部 DOM 属性。

Returns
Type:
Any

返回查询的多属性的键/值对象。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getAttributes 单个方法
import getAttributes from '@yaohaixiao/dom.js/getAttributes'

const $list = byId('#list')

DOM.getAttributes($list, ['id', 'class']) // -> { id: 'list', class: 'list' }
getAttributes($list) // -> { id: 'list', class: 'list' }
getAttributes($list, ['className']) // -> { className: 'list' }

setAttribute(el, attr, value)

Category:
Attributes

getAttribute() 方法用来设置 DOM 元素的 DOM 属性值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attr
Type:
String

(必须)attr 参数指定属性名称。

value
Type:
Any

(必须)value 参数指定属性值。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setAttribute 单个方法
import setAttribute from '@yaohaixiao/dom.js/setAttribute'

const $list = byId('#list')

DOM.setAttribute($list, 'data-id', 'list')
DOM.getAttribute($list, 'data-id') // -> 'list'

// 可以一次性调整多个样式,性能更好
setAttribute($list, 'style', 'width:200px;height:30px;')
DOM.getAttribute($list, 'style') // -> 'width:200px;height:30px;'

DOM.setAttribute($list, 'className', 'nav')
DOM.getAttribute($list, 'className') // -> 'nav'

setAttributes(el, attrs)

Category:
Attributes

getAttributes() 方法用来给 DOM 元素一次设置多个 DOM 属性/值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attrs
Type:
Object

(必须)attrs 参数指定要设置的属性键/值对象。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setAttributes 单个方法
import setAttributes from '@yaohaixiao/dom.js/setAttributes'

const $list = byId('#list')

setAttributes($list, {
  'aria-hidden': true,
  'data-id': 'list',
  style: 'height:30px;width:100%;'
})

DOM.getAttribute($list, 'data-id') // -> 'list'

removeAttribute(el, attr)

Category:
Attributes

removeAttribute() 方法用来移除 DOM 元素的 DOM 属性值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attr
Type:
String

(必须)attr 参数指定属性名称。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 removeAttribute 单个方法
import removeAttribute from '@yaohaixiao/dom.js/removeAttribute'

const $list = byId('#list')

DOM.removeAttribute($list, 'id')
DOM.getAttribute($list, 'id') // -> null

// 可以一次性调整多个样式,性能更好
DOM.setAttribute($list, 'style', 'width:200px;height:30px;')
DOM.getAttribute($list, 'style') // -> 'width:200px;height:30px;'

removeAttribute($list, 'style')
DOM.getAttribute($list, 'style') // -> null

removeAttributes(el, attrs)

Category:
Attributes

removeAttributes() 方法用来移除 DOM 元素(一个或)多个 DOM 属性。不设置 attrs,则移除 el 元素上的所有 DOM 属性。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attrs
Type:
Object

(可选)attrs 参数指定要移除的属性名称数组,不设置 attrs,则移除 el 元素上的所有 DOM 属性。

Usage

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 removeAttributes 单个方法
import removeAttributes from '@yaohaixiao/dom.js/removeAttributes'

const $list = byId('#list')

// 效果相同 removeAttributes(el)
DOM.removeAttributes($list, ['id', 'class'])
DOM.getAttribute($list, 'id') // -> null
DOM.getAttribute($list, 'class') // -> null

getValue(el)

Since

0.5.0

Category:
Attributes

getValue() 方法用来获取 DOM (表单)元素的 value 属性值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns
Type:
String

返回指定的属性值。

Usage

<label for="user" class="label">用户名:</label><input type="text" name="user" id="user" value="Robert" />
<label for="group" class="label">部门:</label>
<select id="group" name="group" class="select">
  <option value="全部">全部</option>
  <option value="开发云" selected>开发云</option>
  <option id="option" value="建模">建模</option>
  <option value="售楼">售楼</option>
</select>
<label for="desc" class="label">备注:</label><textarea name="desc" id="desc">前端工程师</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setValue 单个方法
import setValue from '@yaohaixiao/dom.js/setValue'

const $user = byId('#user')
const $group = byId('#group')
const $option = byId('#option')
const $desc = byId('#desc')

DOM.getValue($user) // -> 'Robert'
DOM.getValue($group) // -> '开发云'

getValue($option) // -> '开发云'
getValue($desc) // -> '前端工程师'

setValue(el, val)

Since

0.5.0

Category:
Attributes

getValue() 方法用来给 DOM (表单)元素设置 value 属性值。

Parameters

el
Type:
HTMLElement
val
Type:
String|Number|Boolean

(必须)val 参数指定属性值。

Usage

<label for="user" class="label">用户名:</label><input type="text" name="user" id="user" value="Robert" />
<label for="group" class="label">部门:</label>
<select id="group" name="group" class="select">
  <option value="全部">全部</option>
  <option value="开发云" selected>开发云</option>
  <option id="option" value="建模">建模</option>
  <option value="售楼">售楼</option>
</select>
<label for="desc" class="label">备注:</label><textarea name="desc" id="desc">前端工程师</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getValue 单个方法
import getValue from '@yaohaixiao/dom.js/getValue'

const $user = byId('#user')
const $group = byId('#group')
const $option = byId('#option')
const $desc = byId('#desc')

DOM.getValue($user) // -> 'Robert'
DOM.setValue($user, 'Yaohaixiao')
DOM.getValue($user) // -> 'Yaohaixiao'


DOM.getValue($group) // -> '开发云'
setValue($group, '建模')
DOM.getValue($group) // -> '建模'

getValue($option) // -> '建模'
setValue($option, '成本')
DOM.getValue($group) // -> '成本'

DOM.getValue($desc) // -> '前端工程师'
setValue($desc, '软件工程师')
DOM.getValue($desc) // -> '软件工程师'

attrs(el[, attr, value])

Category:
Attributes

attrs() 方法用来设置或者获取 DOM 元素的(一个或多个) DOM 属性值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attrs
Type:
String|Array|Object

(可选)attrs 参数指定属性名称。

value
Type:
Any

(可选)value 参数指定属性值。

attrs() 方法的参数配置有以下几种场景:

  1. 仅传递 el 参数:用于获取 el 元素上的所有 DOM 属性;
  2. 传递了 attr 参数
    1. attr 参数为 String 类型
      1. 传递了 value 参数:用于给 el 元素设置(单个) DOM 属性;
      2. 未传递 value 参数:用于获取 el 元素的(单个)DOM 属性值;
    2. 未传递 value 参数
      1. attr 参数为 Array 类型:用于获取 el 元素的多个 DOM 属性/值;
      2. attr 参数为 Object 类型:用于给 el 元素设置多个 DOM 属性/值;
Returns
Type:
Any

返回获取的单个或者多个 DOM 属性。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
   <li class="item">Blog</li>
   <li class="item">Projects</li>
   <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 attrs 单个方法
import attrs from '@yaohaixiao/dom.js/attrs'

const $list = byId('#list')

// 获取所有 DOM 属性
DOM.attrs(el) // => {id:'list',class:'list'}
// 获取单个属性
attrs(el, 'id') // => 'list'
// 获取多个属性
attrs(el, ['id', 'class']) // => {id:'list',class:'list'}

// 设置单个属性
attrs(el, 'id', 'nav')
// 设置多个属性
attrs(el, {id:'list',class:'list'})

enable(el)

Since

1.2.0

Category:
Attribute

enable() 方法用来将启用指定 DOM 元素。

Parameters

el
Type:
HTMLElement

(必须)指定要启用的 DOM 元素。

Usage

<ul id="list" class="list">
  <li class="item active">Home</li>
</ul>

<input type="text" id="user" class="user" value="Robert" />
<input type="checkbox" id="reading" name="hobby" class="checkbox" value="reading" />读书
<textarea id="desc" class="desc">I\'m a programmer</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 enable 单个方法
import enable from '@yaohaixiao/dom.js/enable'

const $list = byId('#list')
const $user = byId('#user')
const $desc = byId('#desc')

// 非 input 或者 textarea 元素 enable() 方法无效
DOM.enable($list) // -> false

DOM.disable($user)
DOM.getAttribute($user, 'disabled') // -> true
// enable() 方法是直接移除 DOM 元素的 disabled 属性
enable($user)
DOM.getAttribute($user, 'disabled') // -> null

// 对已经启用的 DOM 元素无效
DOM.enable($user) // -> false

DOM.disable($desc)
DOM.getAttribute($desc, 'disabled') // -> true
// enable() 方法是直接移除 DOM 元素的 disabled 属性
enable($desc)
DOM.getAttribute($desc, 'disabled') // -> null

disable(el)

Since

1.2.0

Category:
Attribute

disable() 方法用来禁用指定 DOM 元素。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定要禁用的 DOM 元素。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
</ul>

<input type="text" id="user" class="user" value="Robert" />
<input type="checkbox" id="reading" name="hobby" class="checkbox" value="reading" />读书
<textarea id="desc" class="desc">I\'m a programmer</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 disable 单个方法
import disable from '@yaohaixiao/dom.js/disable'

const $list = byId('#list')
const $user = byId('#user')
const $desc = byId('#desc')

// 非 input 或者 textarea 元素 disable() 方法禁用无效
DOM.disable($list) // -> false

disable($user)
DOM.getAttribute($user, 'disabled') // -> true

// 对已经警用的 DOM 元素,再禁用无效
DOM.disable($user) // -> false

disable($desc)
DOM.getAttribute($desc, 'disabled') // -> true

readonly(el)

Since

1.2.0

Category:
Attribute

readonly() 方法用来启用或者取消 DOM 元素的只读模式。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要启用或者禁用制度模式的 DOM 元素。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
</ul>

<input type="text" id="user" class="user" value="Robert" />
<input type="checkbox" id="reading" name="hobby" class="checkbox" value="reading" />读书
<textarea id="desc" class="desc">I\'m a programmer</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 readonly 单个方法
import readonly from '@yaohaixiao/dom.js/readonly'

const $list = byId('#list')
const $user = byId('#user')
const $desc = byId('#desc')

// 非 input 或者 textarea 元素 readonly() 方法无效
DOM.readonly($list) // -> false

DOM.readonly($user)
DOM.getAttribute($user, 'readonly') // -> true
// readonly() 方法是直接移除 DOM 元素的 readonly 属性
readonly($user)
DOM.getAttribute($user, 'readonly') // -> null

// 对已经只读的 DOM 元素无效
DOM.readonly($user) // -> false

DOM.readonly($desc)
DOM.getAttribute($desc, 'readonly') // -> true
readonly($desc)
DOM.getAttribute($desc, 'readonly') // -> null

html(el[, strHTML])

Category:
Attributes

html() 方法用来获取或者设置 DOM 元素的 innerHTML 属性值,或者通过 HTML 字符串,创建 DOM 元素。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定 DOM 元素或者用来创建 DOM 元素的 HTML 字符串;

strHTML
Type:
String

(可选)strHTML 参数指定设置的 innerHTML 字符串,如果不指定则返回 el 元素的 innerHTML 属性(字符串)。

Returns
Type:
Any

返回创建的 DOM 元素或者 DOM 元素的 innerHTML 属性(字符串)。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
   <li class="item">Blog</li>
   <li class="item">Projects</li>
   <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 html 单个方法
import html from '@yaohaixiao/dom.js/html'

const $list = byId('#list')

// 获取 innerHTML 属性(字符串)
DOM.html($list)
// -> '<li class="item active">Home</li>‘
// -> '<li class="item">Blog</li>'
// -> '<li class="item">About</li>'

// 将 $list 元素的 innerHTML 设置为 '<li class="item">Blog</li>'
html($list, '<li class="item">Blog</li>')

// 创建一个 li 标签的 DOM 元素
const $item = html('<li class="item">About</li>')
// 将创建的 $item 元素添加到 $list 列表
$list.appendChild($item)

text(el[, str])

Category:
Attributes

text() 方法获取或者设置 DOM 元素的 innerText 属性值,或者通过字符串,创建 TextNode 元素。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定 DOM 元素或者用来创建 TextNode 元素的字符串。

str
Type:
String

(可选)str 参数指定设置的 innerText 字符串,如果不指定则返回 el 元素的 innerText 属性(字符串)。

Returns
Type:
Any

返回创建的 DOM 元素或者 TextNode 元素的 innerText 属性(字符串)。

Usage

<ul id="list" class="list">
   <li id="active" class="item active">Home</li>
   <li class="item">Blog</li>
   <li class="item">Projects</li>
   <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 text 单个方法
import text from '@yaohaixiao/dom.js/text'

const $active = byId('#active')

// 获取 innerText 属性(字符串)
DOM.text($active) // -> 'Home'

// 将 $active 元素的 innerText 设置为 'Homepage'
text($active, 'Homepage')

// 创建一个文本为 URL 的 TextNode 元素
const $text = test('URL')
// 将创建的 $text 元素添加到 $active
$active.appendChild($text)
text($active) // -> 'HomepageURL'

val(el, value)

Since

0.5.0

Category:
Attributes

val() 方法用来获取或者设置 DOM (表单)元素的 value 属性值。

Parameters

el
Type:
HTMLElement
value
Type:
String|Number|Boolean

(可选)value 参数指定属性值。

Returns
Type:
String

返回指定的属性值。

Usage

<label for="user" class="label">用户名:</label><input type="text" name="user" id="user" value="Robert" />
<label for="group" class="label">部门:</label>
<select id="group" name="group" class="select">
  <option value="全部">全部</option>
  <option value="开发云" selected>开发云</option>
  <option id="option" value="建模">建模</option>
  <option value="售楼">售楼</option>
</select>
<label for="desc" class="label">备注:</label><textarea name="desc" id="desc">前端工程师</textarea>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 val 单个方法
import val from '@yaohaixiao/dom.js/val'

const $user = byId('#user')
const $group = byId('#group')
const $option = byId('#option')
const $desc = byId('#desc')

DOM.val($user) // -> 'Robert'
DOM.val($user, 'Yaohaixiao')
DOM.val($user) // -> 'Yaohaixiao'

val($group) // -> '开发云'
val($group, '建模')
val($group) // -> '建模'

val($option) // -> '建模'
val($option, '成本')
val($group) // -> '成本'

val($desc) // -> '前端工程师'
val($desc, '软件工程师')
val($desc) // -> '软件工程师'

Base

dom.js 提供以下方法用以创建或查询 DOM 元素等基础 DOM 操作。

build(str)

Since

1.1.0

Category:
Base

build() 方法用来将 HTML 字符串解析生成 DOM 节点。

注意:build() 方法与 html() 方法的不同之处在于 build() 方法返回的是 HTML 字符串解析后生成 DOM 元素,而 html() 方法返回的是包含 HTML 字符串解析后生成 DOM 元素的文档碎片。

Parameters

str
Type:
String

(可选)str 参数指定用来创建 DOM 节点的 HTML 字符串。

Returns
Type:
HTMLElement

返回创建的 DOM 元素。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 build 单个方法
import build from '@yaohaixiao/dom.js/build'

const $list = byId('#list')

// 获取 innerHTML 属性(字符串)
const $blog = DOM.build('<li class="item">Blog</li>')

DOM.isElement($blog) // -> true
DOM.append($blog, $list)
// <ul id="list" class="list">
//   <li class="item active">Home</li>
//   <li class="item">Blog</li>
// </ul>

const $projects = build('<li class="item">Projects</li>')

DOM.isElement($projects) // -> true

createElement(tagName[, attrs, children])

Category:
Base

createElement() 方法用来创建 DOM 节点,并添加属性和子节点。

Parameters

tagName
Type:
String

(必须)标签名称。

attrs
Type:
Object|Array|HTMLElement|DocumentFragment|String
  • Object:要添加的 HTML 属性/值对象;
  • Array:添加到创建的 DOM 元素中的多个子元素的数组;
  • HTMLElement:添加到创建的 DOM 元素中的(单个)子元素;
  • DocumentFragment:添加到创建的 DOM 元素中的文档碎片;
  • String:添加到创建的 DOM 元素中的文本(会作为文本节点);

(可选)给创建的 DOM 元素添加的 HTML 属性/值对象或者子元素。

children
Type:
Array|HTMLElement|DocumentFragment|String
  • Array:添加到创建的 DOM 元素中的多个子元素的数组;
  • HTMLElement:添加到创建的 DOM 元素中的(单个)子元素;
  • DocumentFragment:添加到创建的 DOM 元素中的文档碎片;
  • String:添加到创建的 DOM 元素中的文本(会作为文本节点);

(可选)给创建的 DOM 元素添加的子元素。

Returns
Type:
HTMLElement

返回创建的 DOM 元素。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 createElement 单个方法
import createElement from '@yaohaixiao/dom.js/createElement'

// 创建 LI 节点,并且添加一个 TextNode 类型的子元素
const $home = DOM.createElement('li', {
  id: 'home',
  className: 'item active'
}, DOM.text('Home'))

// 创建 LI 节点,设置 class 属性并且添加 Blog 字符串(添加一个 TextNode 类型的子元素)
const $blog = createElement('li', {
  className: 'item'
}, 'Blog')

// 创建 LI 节点,并且添加 About 字符串(添加一个 TextNode 类型的子元素)
const $about = createElement('li', 'About')

addClass($about, 'item')

// 创建 UL 节点,并且添加多个 LI 子节点
const $list = createElement('ul', {
  id: 'list',
  className: 'list'
), [
  $home,
  $blog,
  $about
])

document.body.appendChild($list)

clone(el[, deep])

Category:
Base

clone() 方法用来创建给定 DOM 元素的副本。

Parameters

el
Type:
HTMLElement

(必须)要克隆的 DOM 元素。

deep
Type:
Boolean
Default:
false

(可选)是否深度可浓。

  • false:(默认值)仅克隆指定 DOM 元素,不会可能其包含的子元素;
  • true:克隆指定元素,并且也会克隆其子元素;
Returns
Type:
HTMLElement

返回克隆的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 clone 单个方法
import clone from '@yaohaixiao/dom.js/clone'

const $list = DOM.byId('#list')
const $clone = DOM.clone($list)

// 潜拷贝 $list,不会拷贝其子元素
const $active = DOM.byClass('.active', $clone) // => null

// 采用深拷贝 $list,则会拷贝其子元素,因此可以查询到其子元素
const $current = clone($list, true).querySelector('.active')
// -> <li id="home" class="item active">Home</li>

closet(el, selector[, ctx, includeCTX])

Category:
Base

closet() 方法用来获取父元素最近的包含 selector 选择器的元素。通常用于使用事件代理时,获取点击的目标 DOM 元素。

Parameters

el
Type:
HTMLElement

(必须)el 指定父元素。

selector
Type:
String

(必须)selector 指定要查询元素的选择器。

ctx
Type:
HTMLElement

(可选)ctx 指定比对的 DOM 元素

includeCTX
Type:
Boolean

(可选)includeCTX 指定是否包含 ctx 参数指定的 DOM 元素.

Returns
Type:
HTMLElement

返回匹配的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 closet 单个方法
import closet from '@yaohaixiao/dom.js/closet'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

closet($home, '.active', $list)
// -> <li id="home" class="item active">Home</li>

byClass(className, el)

Category:
Base

byClass() 方法返回与指定的类选择器组匹配的文档中的元素列表 (使用深度优先的先序遍历文档的节点)。返回的对象是 NodeList 。

Parameters

className
Type:
String

(必须)className 类选择器字符串。

el
Type:
HTMLElement

(可选)el 参数指定要检索的 DOM 元素范围,不指定则默认为 document。

Returns
Type:
HTMLElement

返回检索匹配的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 byClass 单个方法
import byClass from '@yaohaixiao/dom.js/byClass'

// 使用 class 选择器,或者使用 class 属性值都可以检索
const $items = DOM.byClass('.item')
const $items = byClass('item')

byId(id, el)

Category:
Base

byId() 方法返回文档中与指定 id 选择器匹配 Element 对象。

Parameters

id
Type:
String

(必须)id 选择器字符串。

el
Type:
HTMLElement

(可选)el 参数指定要检索的 DOM 元素范围,不指定则默认为 document。

Returns
Type:
HTMLElement

返回检索匹配的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 byId 单个方法
import byId from '@yaohaixiao/dom.js/byId'

// 使用 ID 选择器,或者使用 ID 属性值都可以检索
const $list = DOM.byId('#list')
const $home = byId('home')

getEl(selector[, el, multiple])

Category:
Base

返回与指定的选择器组匹配的文档中的 DOM 元素或者 DOM 元素列表。

Parameters

selector
Type:
String

(必须)选择器字符串。

el
Type:
HTMLElement|Boolean

(可选)el 参数指定要检索的 DOM 元素范围(不指定则默认为 document)或者是否返回 DOM 元素列表。

multiple
Type:
Boolean

(可选)multiple 参数指定是否返回 DOM 元素列表,默认值:false。为 true 时,则返回 DOM 元素列表(获取所有于原则器匹配的 DOM 元素)。

Returns
Type:
HTMLElement|NodeList

返回检索匹配的 DOM 元素或者 DOM 元素列表。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getEl 单个方法
import getEl from '@yaohaixiao/dom.js/getEl'

const $list = DOM.getEl('#list')

// 获取多个
const $items = getEl('.item', true)
const $items = getEl('.item', $list, true)

// 仅匹配第一个
const $items = getEl('.item', $list)

find(selector)

Since

0.4.0

Category:
Base

返回文档(document)中与指定的选择器组匹配的第一个 DOM 元素。

Parameters

selector
Type:
String

(必须)选择器字符串。

Returns
Type:
HTMLElement

返回检索匹配的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 find 单个方法
import find from '@yaohaixiao/dom.js/find'

const $list = DOM.find('#list')

// 匹配第一个
const $item = find('.item')
const $blog = find('.blog')

findAll(selector)

Since

0.4.0

Category:
Base

返回文档(document)中与指定的选择器组匹配的所有 DOM 元素。

Parameters

selector
Type:
String

(必须)选择器字符串。

Returns
Type:
NodeList

返回检索匹配的 DOM 元素列表。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 findAll 单个方法
import findAll from '@yaohaixiao/dom.js/findAll'

const $items = DOM.findAll('.item')

const $blog = findAll('.blog')

fragment(innerContent)

Since

1.7.0

Category:
Base

fragment() 方法用来创建文档碎片。

Parameters

innerContent
Type:
String|

(可选)str 参数指定用来创建 DOM 节点的 HTML 字符串。

Returns
Type:
DocumentFragment

返回创建的 DocumentFragment 对象。

Usage

<ul id="list" class="list">
   <li class="item active">Home</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 fragment 单个方法
import fragment from '@yaohaixiao/dom.js/fragment'

const $list = byId('#list')

// 获取 innerHTML 属性(字符串)
const $blog = DOM.build('<li class="item">Blog</li>')

DOM.isElement($blog) // -> true
DOM.append($blog, $list)
// <ul id="list" class="list">
//   <li class="item active">Home</li>
//   <li class="item">Blog</li>
// </ul>

const $projects = fragment('<li class="item">Projects</li>')

DOM.isFragment($projects) // -> true
DOM.append($blog, $list)
// <ul id="list" class="list">
//   <li class="item active">Home</li>
//   <li class="item">Blog</li>
//   <li class="item">Projects</li>
// </ul>

getActiveElement()

Since

1.7.0

Category:
Base

getActiveElement() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getAncestorBy(el, filter)

Since

1.10.0

Category:
Base

getAncestorBy() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getAncestorByClassName(el, className)

Since

1.10.0

Category:
Base

getAncestorByClassName() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getAncestorByTagName(el, tagName)

Since

1.7.0

Category:
Base

getAncestorByTagName() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getChildren(el, filter)

Since

1.10.0

Category:
Base

getChildren() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getChildrenBy(el, filter)

Since

1.10.0

Category:
Base

getChildrenBy() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getContainingBlock(el)

Since

1.9.0

Category:
Base

getContainingBlock() 方法用来获取 DOM 元素的 nodeName 属性值。

Parameters

el
Type:
Node

(必须)指定的 HTMLElement 元素。

Returns
Type:
Window

返回 Window 对象。

<style>
  .list {
    transform: scale(1.2);
  }
</style>

<nav id="nav" class="nav">
  <ul id="list" class="list">
      <li id="home" class="item active">Home</li>
      <li class="item blog">Blog</li>
      <li class="item">Projects</li>
      <li class="item">About</li>
  </ul>
</nav>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getContainingBlock 单个方法
import getContainingBlock from '@yaohaixiao/dom.js/getContainingBlock'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getContainingBlock($list) // -> 'null

getContainingBlock($home))
// -> '<ul id="list" class="list"></ul>'

getDocument(node)

Since

1.6.0

Category:
Base

getDocument() 方法用来获取 Node 对象(DOM 元素)所在的文档的 documentElement 对象。

Parameters

node
Type:
Node | Window

(必须)指定的 DOM 元素或者 window 对象。

Returns
Type:
documentElement 对象

返回 documentElement 对象。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getDocument 单个方法
import getDocument from '@yaohaixiao/dom.js/getDocument'

const $list = DOM.getEl('#list')

// 浏览器中运行
DOM.getDocument($list) // -> 返回 $list 所在文档的 documentElement 对象
getDocument(document) // -> 返回当前文档的 documentElement 对象
getWindow(window) // -> 返回当前文档的 documentElement 对象

getFirstChild(el, filter)

Since

1.10.0

Category:
Base

getFirstChild() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getFirstChildBy(el, filter)

Since

1.10.0

Category:
Base

getFirstChildBy() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getImages(el, includeDuplicates)

Since

1.6.0

Category:
Base

返回这个页面页或者某个DOM元素下的所有图片路径的数组。

Parameters

el
Type:
String
Default:
'body'

(可选)指定 DOM 节点的选择器。默认值: document.body。

includeDuplicates
Type:
Boolean
Default:
false

(可选)是否收集重复的图片。默认值:false

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getImages 单个方法
import getImages from '@yaohaixiao/dom.js/getImages'

const $list = DOM.getEl('#list')

// 获取整个页面中的图片路径,不包含重复的图片
DOM.getImages(true)

// 仅获取 $list 菜单下的图片路径,包含重复的图片
getImages($list, true)

getHostOrParent(el)

Category:
Base

getHostOrParent() 方法用来获取 DOM 元素的父节点。

Parameters

el
Type:
HTMLElement

el 参数指定 DOM 元素。

Returns
Type:
HTMLElement

返回查询到的 DOM 元素的父节点。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getHostOrParent 单个方法
import getHostOrParent from '@yaohaixiao/dom.js/getHostOrParent'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

const $parent = DOM.getHostOrParent($home)
console.log($parent === $list) // -> true

getLastChild(el, filter)

Since

1.10.0

Category:
Base

getLastChild() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getLastChildBy(el, filter)

Since

1.10.0

Category:
Base

getLastChildBy() 方法返回当前在 DOM 或者 shadow DOM 树中处于聚焦状态的 DOM 元素。

Returns
Type:
HTMLElement

返回处于聚焦状态的 DOM 元素。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getActiveElement 单个方法
import getActiveElement from '@yaohaixiao/dom.js/getActiveElement'

const $list = DOM.getEl('#list')
const $home = DOM.getEl('#home')

DOM.getActiveElement() // -> null

$home.click()
getActiveElement()
// -> <li id="home" class="item active">Home</li>

getNodeName(node)

Since

1.9.0

Category:
Base

getNodeName() 方法用来获取 DOM 元素的 nodeName 属性值。

Parameters

node
Type:
Node

(必须)指定的 Node 元素。

Returns
Type:
Window

返回 Window 对象。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getNodeName 单个方法
import getNodeName from '@yaohaixiao/dom.js/getNodeName'

const $list = DOM.getEl('#list')

// DOM 元素的 nodeName
DOM.getNodeName($list) // -> 'ul'

// 文本节点也可返回
getNodeName(DOM.text('text')) // -> '#text'

getOffsetParent(el)

Category:
Base

getOffsetParent() 方法用来获取最近的(指包含层级上的最近)包含该元素的定位父元素。

Parameters

el
Type:
HTMLElement

el 参数指定 DOM 元素。

Returns
Type:
HTMLElement

返回查询到的 DOM 元素的父节点。

<style>
.list {
  position:relative;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getOffsetParent 单个方法
import getOffsetParent from '@yaohaixiao/dom.js/getOffsetParent'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

const $parent = DOM.getOffsetParent($home)
console.log($parent === $list) // -> true

console.log(getOffsetParent($list)) // -> document.body

getScrollParent(el)

Category:
Base

getScrollParent() 方法用来获取最近的(指包含层级上的最近)包含该元素的滚动父元素(overflow/overflow-x/overflow-y: auto )。

Parameters

el
Type:
HTMLElement

el 参数指定 DOM 元素。

Returns
Type:
HTMLElement

返回查询到的 DOM 元素的父节点。

<style>
.list {
  position:relative;
  overflow: auto;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollParent 单个方法
import getScrollParent from '@yaohaixiao/dom.js/getScrollParent'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

const $parent = DOM.getScrollParent($home)
console.log($parent === $list) // -> true

console.log(getScrollParent($list)) // -> document.body

getTagName(el)

Since

1.9.0

Category:
Base

getTagName() 方法用来获取 DOM 元素的 tagName 属性值。

Parameters

el
Type:
HTMLElement

(必须)指定的 HTMLElement 元素。

Returns
Type:
Window

返回 Window 对象。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getTagName 单个方法
import getTagName from '@yaohaixiao/dom.js/getTagName'

const $list = DOM.getEl('#list')

// DOM 元素的 tagName
DOM.getTagName($list) // -> 'ul'

// 文本节点没有 tagName,因此返回 ''
getNodeName(DOM.text('text')) // -> ''

getWindow(o)

Since

1.6.0

Category:
Base

getWindow() 方法用来获取 window 对象。

Parameters

o
Type:
Node | Window

(必须)指定的 DOM 元素或者 window 对象。

Returns
Type:
Window

返回 Window 对象。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getWindow 单个方法
import getWindow from '@yaohaixiao/dom.js/getWindow'

const $list = DOM.getEl('#list')

// 浏览器中运行
DOM.getWindow(window) // -> 返回当前 Window 对象

getWindow(document) // -> 返回当前 Window 对象
getWindow($list) // -> 返回当前 Window 对象

getVisualViewport(el)

Since

1.7.0

Category:
Base

getVisualViewport() 方法用来获取(el元素所在窗口的)VisualViewport 对象。

Parameters

el
Type:
HTMLElement

(可选)el 参数指定 DOM 元素,用以获取元素所在窗口的 VisualViewport 对象,不指定 el,则直接获取当前窗口的 VisualViewport 对象。

Returns

Type:
VisualViewport。

返回(el元素所在窗口的或者当前) VisualViewport 对象。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 getVisualViewport() 方法
import getVisualViewport from '@yaohaixiao/dom.js/getVisualViewport'

const $list = document.getElementById('list')

DOM.getVisualViewport($list) // -> 返回 $list 所在窗口的 VisualViewport 对象
getVisualViewport() // -> 返回当前窗口的 VisualViewport 对象

index(el[, ancestor])

Category:
Base

index() 方法用来查询 DOM 元素在其父节点中的索引位置。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定 DOM 元素或者 DOM 元素的选择器字符串。

ancestor
Type:
HTMLElement

(可选)ancestor 参数指定父节点。

Returns
Type:
Number

返回查询到的 DOM 元素在其父节点的 index 索引值。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 index 单个方法
import index from '@yaohaixiao/dom.js/index'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

// el 参数是 DON 元素
console.log(DOM.indexOf($home)) // -> 0

// 指定父节点
console.log(indexOf('.blog', $list)) // -> 1

// el 为选择器,且为指定指定父节点
console.log(indexOf('.project')) // -> 2

children(el)

Category:
Base

children() 方法用来获取指定 DOM 元素下所有元素节点。

Parameters

el
Type:
HTMLElement

el 参数指定 DOM 元素。

Returns
Type:
Array

返回查询到的 DOM 元素的数组。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 children 单个方法
import children from '@yaohaixiao/dom.js/children'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.children($list)
// -> [
//   <li id="home" class="item active">Home</li>,
//   <li class="item">Blog</li>
//   <li class="item">Projects</li>
//   <li class="item">About</li>
// ]

children($home) // -> []

parent(el[, type])

Category:
Base

parent() 方法用来获取给定 el 元素的父节点。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

type
Type:
String

(可选)type 指定父节点的类型:

  • offset:获取最近的(指包含层级上的最近)包含该元素的定位父元素;
  • scroll: 获取最近的(指包含层级上的最近)包含该元素的滚动父元素(overflow/overflow-x/overflow-y: auto );
  • 其它:获取 el 的父节点;
Returns
Type:
HTMLElement

返回 el 节点(指定类型)的父节点。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 parent 单个方法
import parent from '@yaohaixiao/dom.js/parent'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.parent($home)
// -> <ul id="list" class="list">
parent($home, 'scroll')
// -> document.documentElement

parent($list, 'offset')
// -> document.body

parents(el[, includeSelf = false])

Since

1.7.0

Category:
Base

parents() 方法用来获取给定 el 元素的所有父节点,并可以包含自身。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素或者 DOM 元素的选择器字符串。

includeSelf
Type:
Boolean
Default:
false

(可选)includeSelf 指定之后包含元素自身。默认值:false。

Returns
Type:
Array

返回 el 节点的所有父节点的数组。

<ul id="list" class="list">
    <li id="home" class="item home active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 parents 单个方法
import parents from '@yaohaixiao/dom.js/parents'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.parents($home)
// -> [<ul id="list" class="list">]
parents('.home', true)
// -> [
//  <ul id="list" class="list">,
//  <li id="home" class="item active">Home</li>
// ]

Color

dom.js 提供以下方法用于处理 DOM 元素的颜色值相关的操作。

getColor(el, attr, isHex = true)

Since

0.4.0

Category:
Color

getColor() 方法用来获取 DOM 元素指定的颜色值。可指定获取 16 进制色值或者 RGB 色值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 节点。

attr
Type:
String

(必须)attr 参数指定表示颜色的属性字符串:

// 只能是以下包含的颜色属性
[
  'accent-color',
  'background-color',
  'border-color',
  'border-bottom-color',
  'border-left-color',
  'border-right-color',
  'border-top-color',
  'color',
  'outline-color',
  'text-decoration-color'
]
isHex
Type:
Boolean
Default:
true

(可选)isHex 参数指定是否为 16 进制色值:

  • true: (默认值) 16 进制色值;
  • false: RGB 色值;
Returns
Type:
String

返回表示色值的字符串。

<style>
  .list {
    background-color: rgb(255,255,255);
    color: black;
  }
</style>

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getColor 单个方法
import getColor from '@yaohaixiao/dom.js/getColor'

const $list = DOM.byId('#list')

DOM.getColor($list, 'color', false) // 'rgb(0, 0, 0)'
getColor($list, 'background-color') // '#ffffff'

randomHexColor()

Since

1.7.0

Category:
Color

randomHexColor() 方法用来将随机生成 HEX 格式颜色代码字符串。

Returns
Type:
String

返回随机生成 HEX 格式颜色代码字符串。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 randomHexColor 单个方法
import randomHexColor from '@yaohaixiao/dom.js/randomHexColor'

DOM.randomHexColor() // -> '#ff1100'
randomHexColor() // -> '#ef23c2'

toHex(color)

Since

0.4.0

Category:
Color

toHex() 方法用来将指定颜色(颜色英文名称、RGB格式或者 HSL 格式色值)转化成 16 进制色值。

Parameters

color
Type:
String

(必须)color 参数指定指定颜色。

Returns
Type:
String

返回转化后的 16 进制色值。

<style>
  .list {
    background-color: rgb(255,255,255);
    color: black;
  }
</style>

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 toHex 单个方法
import toHex from '@yaohaixiao/dom.js/toHex'

const $list = DOM.byId('#list')

DOM.toHex(DOM.getStyle($list, 'color')) // '#000'
toHex(DOM.getStyle($list, 'background-color')) // '#ffffff'
toHex('hsl(0,100%,50%)') // -> '#ff0000'

toHSL(color)

Since

1.3.0

Category:
Color

toHSL() 方法用来将指定颜色(颜色英文名称、16 进制或RGB格式色值)转化成 HSL 格式色值。

Parameters

color
Type:
String

(必须)color 参数指定指定颜色。

Returns
Type:
String

返回转化后的 HSL 进制色值。

<style>
  .list {
    background-color: rgb(255,255,255);
    color: black;
  }
</style>

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 toHSL 单个方法
import toHSL from '@yaohaixiao/dom.js/toHSL'

const $list = DOM.byId('#list')

DOM.toHSL(DOM.getStyle($list, 'color')) // 'hsl(0,0%,0%)'
toHSL(DOM.getStyle($list, 'background-color')) // 'hsl(0,0%,100%)'
toHSL('red') // 'hsl(0,100%,50%)'

toRGB(color)

Since

0.4.0

Category:
Color

toHex() 方法用来将指定颜色(颜色英文名称、16 进制或者 HSL 色值)转化成 RGB 色值。

Parameters

color
Type:
String

(必须)color 参数指定指定颜色。

Returns
Type:
String

返回转化后的 RGB 色值。

<style>
  .list {
    background-color: #fff;
    color: black;
  }
</style>

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 toRGB 单个方法
import toRGB from '@yaohaixiao/dom.js/toRGB'

const $list = DOM.byId('#list')

DOM.toRGB(DOM.getStyle($list, 'color')) // -> 'rgb(0, 0, 0)'
toRGB(DOM.getStyle($list, 'background-color')) // -> 'rgb(255, 255, 255)'
toRGB('hsl(0,100%,50%)') // -> 'rgb(255, 0, 0)'

Detect

dom.js 提供以下方法用以处理 DOM 元素检测相关的通用操作。

canPosition(el)

Category:
Base

canPosition() 方法用来检测 DOM 元素是否可以定位(可见且在当前当前文档中)。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns
Type:
Boolean

DOM 元素是否可以定位,返回 true,否则返回 false。

<ul id="list" class="list">
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 canPosition 单个方法
import canPosition from '@yaohaixiao/dom.js/canPosition'

const $list = DOM.byId('#list')
const $home = DOM.html('<li id="home" class="item active">Home</li>')

DOM.inDocument($list) // -> true
DOM.canPosition($list) // -> true
canPosition($home) // -> false

$list.appendChild($home)
canPosition($home) // -> true

DOM.setStyle($home, 'display', 'none')
canPosition($home) // -> false

contains(el, ancestor)

Category:
Base

contains() 方法用来判断某个 DOM 元素中是否包含另一个 DOM 元素。

Parameters

el
Type:
HTMLElement|String

(必须)被包含的 DOM 元素或者 DOM 元素的选择器字符串:

ancestor
Type:
HTMLElement|String

(必须)ancestor 指定用来查询目标 DOM 元素的父元素:

Returns
Type:
Boolean

包含查询元素返回 true,否则返回 false。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 contains 单个方法
import contains from '@yaohaixiao/dom.js/contains'

// 使用 class 选择器,或者使用 class 属性值都可以检索
const $list = DOM.byId('#list')
const $home = byClass('#home')

DOM.contains($home, $list) // -> true
contains('.blog', $list) // -> true

inDocument(el[, doc])

Category:
Detect

inDocument() 方法用来检测 DOM 元素是否在当前文档中。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

doc
Type:
Object

(可选)doc 参数指定文档对象。

Returns
Type:
Boolean

DOM 元素是否在当前文档中,返回 true,否则返回 false。

<ul id="list" class="list">
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 inDocument 单个方法
import inDocument from '@yaohaixiao/dom.js/inDocument'

const $list = DOM.byId('#list')
const $home = DOM.html('<li id="home" class="item active">Home</li>')

DOM.inDocument($list) // -> true
inDocument($home) // -> false

$list.appendChild($home)
inDocument($home) // -> true

isContainingBlock(el)

Since

1.9.0

Category:
Detect

isContainingBlock() 方法用来检测 DOM 节点用来检测 DOM 元素是否为布局和包含块。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns
Type:
Boolean

DOM 节点为布局和包含块,返回 true,否则为 false。

<style>
  .list {
    transform: scale(1.2);
  }
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isContainingBlock 单个方法
import isContainingBlock from '@yaohaixiao/dom.js/isContainingBlock'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.isContainingBlock($home) // -> true
isContainingBlock($home) // -> false

isLayoutViewport()

Since

1.7.0

Category:
Detect

isLayoutViewport() 方法用来判断当前视图是否为布局视图。

Returns

Type:
Boolean。

true - 表示当前视图是否为布局视图,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isShadowRoot() 方法
import isLayoutViewport from '@yaohaixiao/dom.js/isLayoutViewport'

DOM.isLayoutViewport() // -> 可以用移动设备模拟器查看 false
isLayoutViewport() // -> true

isMatched(el, filter)

Category:
Detect

isMatched() 方法用来检测 DOM 节点是否为符合 filter 检测条件的节点。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

filter
Type:
Function|String

(必须)filter 参数指定用于检测 DOM 节点的回调函数或者选择器字符串。

Returns
Type:
Boolean

DOM 节点符合 filter 检测条件,返回 true,否则为 false。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isMatched 单个方法
import isMatched from '@yaohaixiao/dom.js/isMatched'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.isMatched($home, '.active') // -> true
isMatched($home, (el) => {
  return DOM.contains(el, $list)
}) // -> true

isMatched($list, '.active') // -> false

isScaled(el)

Since

1.9.0

Category:
Detect

isScaled() 方法用来检测 DOM 节点是否被缩放了。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns
Type:
Boolean

DOM 节点被缩放返回 true,否则为 false。

<ul id="list" class="list">
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

<div id="home" class="home">Home</div>

<style>
  .home {
    transform: scale(0.8);
  }
</style>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isScaled 单个方法
import isScaled from '@yaohaixiao/dom.js/isScaled'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.isScaled($home) // -> false
isScaled($home) // -> true

isWindow(o)

Since

1.6.0

Category:
Detect

isWindow() 方法用来检测当前对象是否为 window 对象。

Parameters

o
Type:
Object

(必须)要检测的目标对象。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isWindow 单个方法
import isWindow from '@yaohaixiao/dom.js/isWindow'

// 浏览器中运行
DOM.isWindow(window) // -> true
DOM.isWindow(document) // -> false

// Node 环境中运行
isWindow(global) // -> false

has(el, selector)

Category:
Base

contains() 方法用来判断某个 DOM 元素中是否包含另一个 DOM 元素。

Parameters

el
Type:
HTMLElement|String

(必须)被包含的 DOM 元素或者 DOM 元素的选择器字符串:

selector
Type:
String

(必须)selector 指定用来查询目标 DOM 元素的选择器字符串:

Returns
Type:
Boolean

包含查询元素返回 true,否则返回 false。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 has 单个方法
import has from '@yaohaixiao/dom.js/has'

// 使用 class 选择器,或者使用 class 属性值都可以检索
const $list = DOM.byId('#list')
const $home = byClass('#home')

DOM.has($list, '.active') // -> true
has($list, '.blog') // -> true

matches(el, selector)

Category:
Base

matches() 方法用来获取 el 节点下匹配 selector 选择器的 DOM 节点。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

selector
Type:
String

(必须)selector 指定匹配 DOM 元素的选择器。

Returns
Type:
Boolean

el 节点查询到匹配 selector 的 DOM 节点,返回 DOM 节点,否则返回 false。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 matches 单个方法
import matches from '@yaohaixiao/dom.js/matches'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.matches($list, '.active')
// -> <li id="home" class="item active">Home</li>
matches($home, '#home')
// -> <li id="home" class="item active">Home</li>

matches($home, '.blog') // -> false

DOMRect

dom.js 提供以下方法用以处理 DOMRect 相关的操作。

getBoundingClientRect(el)

Since

1.7.0

Category:
DOMRect

getBoundingClientRect() 方法用来获取 DOM 元素的 getBoundingClientRect 数据。

Parameters

el
Type:
Any

(必须)el 参数指定需要获取数据的 DOM 元素。

Returns

Type:
Object。

返回 el 元素的(扩展后的) Rect 数据。

{
  width,
  height,
  top,
  right,
  bottom,
  left,
  x,
  y
}
// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 getBoundingClientRect() 方法
import getBoundingClientRect from '@yaohaixiao/dom.js/getBoundingClientRect'

const $list = DOM.byId('#list')
const $host = DOM.byId("#host")

DOM.getBoundingClientRect($list) // -> false
getBoundingClientRect($host) // -> true

getDocumentRect(el)

Since

1.8.0

Category:
DOMRect

getDocumentRect() 方法用来获取 DOM 元素所在的可滚动的文档区域的尺寸。

Parameters

el
Type:
Any

(必须)el 参数指定 DOM 元素。

Returns

Type:
Object。

返回 Rect 数据。

{
  width,
  height,
  x,
  y
}
// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 getDocumentRect() 方法
import getDocumentRect from '@yaohaixiao/dom.js/getDocumentRect'

const $list = DOM.byId('#list')
const $host = DOM.byId("#host")

DOM.getDocumentRect($list) // -> {"width": 1920, "height": 457, "x": 0, "y": 0}
getDocumentRect($host) // -> {"width": 1920, "height": 691, "x": 0, "y": 0}

getViewportRect(el)

Since

1.8.0

Category:
DOMRect

getViewportRect() 方法用来获取 DOM 元素所在的文档可视区域(viewport)的尺寸。如果页面没有滚动条时,其返回值与 getDocumentRect() 方法的返回值相等。

Parameters

el
Type:
Any

(必须)el 参数指定 DOM 元素。

Returns

Type:
Object。

返回 Rect 数据。

{
  width,
  height,
  x,
  y
}
// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 getViewportRect() 方法
import getViewportRect from '@yaohaixiao/dom.js/getViewportRect'

const $list = DOM.byId('#list')
const $host = DOM.byId("#host")

DOM.getViewportRect($list) // -> {"width": 1920, "height": 691, "x": 0, "y": 0}
getViewportRect($host) // -> {"width": 1920, "height": 691, "x": 0, "y": 0}

inBounding(child, parent)

Since

0.2.0

Category:
DOMRect

inBounding() 方法用来检测某个 DOM 节点的位置是否在另个一个 DOM 节点范围内。

Parameters

child
Type:
HTMLElement

(必须)child 参数指定其中较小的那个 DOM 元素。

parent
Type:
HTMLElement

(必须)parent 参数指定其中较大的那个 DOM 元素。

Returns
Type:
Boolean

child 在 parent 范围内,返回 true,否则返回 false。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 inBounding 单个方法
import inBounding from '@yaohaixiao/dom.js/inBounding'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.inBounding($home, $list) // -> true
inBounding($list, $home) // -> false

inViewport(el)

Since

0.2.0

Category:
DOMRect

inViewport() 方法用来检测某个 DOM 节点的位置是否在当前视口(当前窗口可见区域)之内。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns
Type:
Boolean

el 在当前视口内,返回 true,否则返回 false。

<style>
.blog{
  position: fixed;
  left: 99999;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 inViewport 单个方法
import inViewport from '@yaohaixiao/dom.js/inViewport'

const $list = DOM.byId('#list')
const $blog = DOM.getEl('.blog')

DOM.inViewport($list) // -> true
inViewport($blog) // -> false

DOM Insertion

dom.js 提供以下方法用于处理插入新的 DOM 元素。

insertAfter(el, reference)

Category:
DOM Insertion

insertAfter() 方法用来在参考节点之后插入一个拥有指定父节点的子节点。如果给定的子节点是对文档中现有节点的引用,insertAfter() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。

Parameters

el
Type:
Element

(必须)el 参数指定要插入的 DOM 元素(DocumentFragment,HTMLElement或者TextNode)。

reference
Type:
String

(必须)reference 指定参考节点。

Returns
Type:
Element|null

函数返回被插入的子节点。当 el 是 DocumentFragment 时,返回空 DocumentFragment。参数不合法时返回 null。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item project">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertAfter 单个方法
import insertAfter from '@yaohaixiao/dom.js/insertAfter'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $about = DOM.getEl('.about')
const $blog = DOM.html('<li class="item blog">Blog</li>')

// 插入创建的节点
DOM.insertAfter($blog, $home)
// -> <li class="item blog">Blog</li>

// 插入引用节点
insertAfter($about, $home)
// -> <li class="item about">About</li>

insertBefore(el, reference)

Category:
DOM Insertion

insertBefore() 方法用来在参考节点之前插入一个拥有指定父节点的子节点。如果给定的子节点是对文档中现有节点的引用,insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。

Parameters

el
Type:
Element

(必须)el 参数指定要插入的 DOM 元素(DocumentFragment,HTMLElement或者TextNode)。

reference
Type:
String

(必须)reference 指定参考节点。

Returns
Type:
Element|null

函数返回被插入的子节点。当 el 是 DocumentFragment 时,返回空 DocumentFragment。参数不合法时返回 null。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item project">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertBefore 单个方法
import insertBefore from '@yaohaixiao/dom.js/insertBefore'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $about = DOM.getEl('.about')
const $blog = DOM.html('<li class="item blog">Blog</li>')

// 插入创建的节点
DOM.insertBefore($blog, $home)
// -> <li class="item blog">Blog</li>

// 插入引用节点
insertBefore($about, $home)
// -> <li class="item about">About</li>

insertHTMLAfterBegin(el, strHTML, dangerouslyUseHTMLString = true)

Category:
DOM Insertion

insertHTMLAfterBegin() 方法用来将指定的文本解析为 Element 元素,并将结果节点插入 el 元素之前。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或 DOM 元素的选择器字符串。

str
Type:
String

(必须)str 指定希望插入的 html 字符串。

dangerouslyUseHTMLString
Type:
Boolean
Default:
true

(必须)dangerouslyUseHTMLString 指定是否将 str 文本解析为 Element 元素(默认值:true)。

注意:insertHTMLAfterBegin() 方法默认会过滤掉 str 文本中的 <script> 危险文本。

Returns
Type:
Element|null

函数返回被插入的子节点。参数不合法时返回 null。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertHTMLAfterBegin 单个方法
import insertHTMLAfterBegin from '@yaohaixiao/dom.js/insertHTMLAfterBegin'

const $list = DOM.byId('#list')

// 将插入 html 插入到 $list 节点前面
DOM.insertHTMLAfterBegin($list, '<ul><li id="home" class="item active">Home</li></ul>')

// 将插入 html 插入到 $list 节点前面
insertHTMLAfterBegin($list, '<ul><li class="item project">Projects</li></ul>', false)

insertHTMLAfterEnd(el, str, dangerouslyUseHTMLString = true)

Category:
DOM Insertion

insertHTMLAfterEnd() 方法用来将指定的文本解析为 Element 元素,并将结果节点插入 el 元素自身内部最后面。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或 DOM 元素的选择器字符串。注意,仅在 el 节点在树中且节点具有一个 parent 元素时工作。

str
Type:
String

(必须)str 指定希望插入的 html 字符串。

dangerouslyUseHTMLString
Type:
Boolean
Default:
true

(必须)dangerouslyUseHTMLString 指定是否将 str 文本解析为 Element 元素(默认值:true)。

注意:insertHTMLAfterEnd() 方法默认会过滤掉 str 文本中的 <script> 危险文本。

Returns
Type:
Element|null

函数返回被插入的子节点。参数不合法时返回 null。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertHTMLAfterEnd 单个方法
import insertHTMLAfterEnd from '@yaohaixiao/dom.js/insertHTMLAfterEnd'

const $list = DOM.byId('#list')

// 将插入 html 插入到 $list 节点内部最后面
DOM.insertHTMLAfterEnd($list, '<ul><li id="home" class="item active">Home</li></ul>')

// 将插入 html 插入到 $list 节点内部最后面
insertHTMLAfterEnd($list, '<ul><li class="item project">Projects</li></ul>', false)

insertHTMLBeforeBegin(el, str, dangerouslyUseHTMLString = true)

Category:
DOM Insertion

insertHTMLBeforeBegin() 方法用来将指定的文本解析为 Element 元素,并将结果节点插入 el 元素自身内部最前面。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或 DOM 元素的选择器字符串。注意,仅在 el 节点在树中且节点具有一个 parent 元素时工作。

str
Type:
String

(必须)str 指定希望插入的 html 字符串。

dangerouslyUseHTMLString
Type:
Boolean
Default:
true

(必须)dangerouslyUseHTMLString 指定是否将 str 文本解析为 Element 元素(默认值:true)。

注意:insertHTMLBeforeBegin() 方法默认会过滤掉 str 文本中的 <script> 危险文本。

Returns
Type:
Element|null

函数返回被插入的子节点。参数不合法时返回 null。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertHTMLBeforeBegin 单个方法
import insertHTMLBeforeBegin from '@yaohaixiao/dom.js/insertHTMLBeforeBegin'

const $list = DOM.byId('#list')

// 将插入 html 插入到 $list 节点内部最前面
DOM.insertHTMLBeforeBegin($list, '<li id="home" class="item active">Home</li>')

// 将插入 html 插入到 $list 节点内部最前面
insertHTMLBeforeBegin($list, '<li class="item project">Projects</li>')

insertHTMLBeforeEnd(el, str, dangerouslyUseHTMLString = true)

Category:
DOM Insertion

insertHTMLBeforeEnd() 方法用来将指定的文本解析为 Element 元素,并将结果节点插入 el 元素之后。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或 DOM 元素的选择器字符串。

str
Type:
String

(必须)str 指定希望插入的 html 字符串。

dangerouslyUseHTMLString
Type:
Boolean
Default:
true

(必须)dangerouslyUseHTMLString 指定是否将 str 文本解析为 Element 元素(默认值:true)。

注意:insertHTMLBeforeEnd() 方法默认会过滤掉 str 文本中的 <script> 危险文本。

Returns
Type:
Element|null

函数返回被插入的子节点。参数不合法时返回 null。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 insertHTMLBeforeEnd 单个方法
import insertHTMLBeforeEnd from '@yaohaixiao/dom.js/insertHTMLBeforeEnd'

const $list = DOM.byId('#list')

// 将插入 html 插入到 $list 节点后面
DOM.insertHTMLBeforeEnd($list, '<ul><li id="home" class="item active">Home</li></ul>')

// 将插入 html 插入到 $list 节点后面
insertHTMLBeforeEnd($list, '<ul><li class="item project">Projects</li></ul>', false)

append(el, reference)

Category:
DOM Insertion

append() 方法用来将指定 DOM 节点或者 html 文本解析为 DOM 元素,并将结果节点插入 el 元素自身内部的最后面。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或者字符串(HTML或者普通字符串)。

reference
Type:
String

(必须)reference 指定 DOM 节点。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 append 单个方法
import append from '@yaohaixiao/dom.js/append'

const $list = DOM.byId('#list')
const $project = DOM.html('<li class="item project">Projects</li>')

// 将插入 html 插入到 $list 节点内部的最后面
DOM.append('<li id="home" class="item active">Home</li>', $list)

// 将插入 html 插入到 $list 节点内部的最后面
append($project, $list)

// 将普通字符串插入到 $list 节点内部的最后面
append('将普通字符串插入到 $list 节点内部的最后面', $list)

prepend(el, reference)

Category:
DOM Insertion

prepend() 方法用来将指定 DOM 节点或者 html 文本解析为 DOM 元素,并将结果节点插入 reference 元素自身内部的最前。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或者字符串(HTML或者普通字符串)。

reference
Type:
String

(必须)reference 指定 DOM 节点。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prepend 单个方法
import prepend from '@yaohaixiao/dom.js/prepend'

const $list = DOM.byId('#list')
const $project = DOM.html('<li class="item project">Projects</li>')

// 将插入 html 插入到 $list 节点内部的最前面
DOM.prepend('<li id="home" class="item active">Home</li>', $list)

// 将插入 html 插入到 $list 节点内部的最前面
prepend($project, $list)

// 将普通字符串插入到 $list 节点内部的最前面
prepend('将普通字符串插入到 $list 节点内部的最前面', $list)

after(el, reference)

Category:
DOM Insertion

after() 方法用来在指定 DOM 节点后添加子节点或者将 HTML 字符转化成节点添加到后面。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或者 HTML 字符。

reference
Type:
HTMLElement

(必须)reference 指定 DOM 节点。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 after 单个方法
import after from '@yaohaixiao/dom.js/after'

const $list = DOM.byId('#list')
const $menu = DOM.html('<ul><li class="item project">Projects</li></ul>')

// 将插入 html 插入到 $list 节点后面
DOM.after('<ul><li id="home" class="item active">Home</li></ul>', $list)

// 将创建的 $menu 节点插入到 $list 节点后面
after($menu, $list)

before(el, reference)

Category:
DOM Insertion

before() 方法用来在指定 DOM 节点后添加子节点或者将 HTML 字符转化成节点添加到前面。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或者 HTML 字符。

reference
Type:
HTMLElement

(必须)reference 指定 DOM 节点。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 before 单个方法
import before from '@yaohaixiao/dom.js/before'

const $list = DOM.byId('#list')
const $menu = DOM.html('<ul><li class="item project">Projects</li></ul>')

// 将插入 html 插入到 $list 节点前面
DOM.before('<ul><li id="home" class="item active">Home</li></ul>', $list)

// 将创建的 $menu 节点插入到 $list 节点前面
before($menu, $list)

replace(el, reference)

Since

1.1.0

Category:
DOM Insertion

replace() 方法用来将 DOM 节点或者 HTML 字符转化成 DOM 节点,已替换指定的 DOM 节点。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要插入的 DOM 元素或者 HTML 字符。

reference
Type:
HTMLElement

(必须)reference 指定要替换的 DOM 节点。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 replace 单个方法
import replace from '@yaohaixiao/dom.js/replace'

const $list = DOM.byId('#list')
const $menu = DOM.html('<ul><li class="item project">Projects</li></ul>')

// 用 html 字符转化的 DOM 节点 替换 $list 节点
DOM.replace('<ul><li id="home" class="item active">Home</li></ul>', $list)

// 用动态创建的 $menu 节点替换 $list 节点
replace($menu, $list)

remove(el)

Since

1.3.1

Category:
DOM Insertion

remove() 方法用来将指定 DOM 节点从当前文档树中移除。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定要移除的 DOM 元素或者 DOM 元素的选择器字符串。

<ul id="list" class="list">
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 remove 单个方法
import remove from '@yaohaixiao/dom.js/remove'

const $list = DOM.byId('#list')

// 移除指定选择器的 DOM 元素
DOM.remove('.item')

// 移除 DOM 元素
remove($list)

unwrap(collection, selector)

Since

1.1.0

Category:
DOM Insertion

wrap() 方法用来从 DOM 中移除匹配元素集的父元素,将匹配的元素保留在它们的位置。

Parameters

collection
Type:
NodeList

(必须)collection 需要包裹的 NodeList 列表。

wrapElement
Type:
String

(必须)selector 指定去表包裹 NodeList 的 HTML 标签的 DOM 父节点:

<ul id="list" class="list">
  <li class="item">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>
<div class="wrapper"></div>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 unwrap 单个方法
import unwrap from '@yaohaixiao/dom.js/unwrap'

const $list = DOM.byId('#list')
const $items = DOM.byClass('.item', $list)

// 用 html 字符
DOM.wrap($items, '
') // -> <ul id="list" class="list"> // <div class="wrap"> // <li class="item">Home</li> // </div> // <div class="wrap"> // <li class="item">Blog</li> // </div> // <div class="wrap"> // <li class="item">Projects</li> // </div> // <div class="wrap"> // <li class="item">About</li> // </div> // </ul> // 用选择器获取 DOM 节点,实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签 unwrap($items, '.wrap') // -> <ul id="list" class="list"> // <li class="item">Home</li> // <li class="item">Blog</li> // <li class="item">Projects</li> // <li class="item">About</li> // </ul>

wrap(collection, wrapElement)

Since

1.1.0

Category:
DOM Insertion

wrap() 方法用来给 NodeList 中的每个 DOM 节点包裹上指定 HTML 标签。

Parameters

collection
Type:
NodeList

(必须)collection 需要包裹的 NodeList 列表。

wrapElement
Type:
String|HTMLElement|Function

(必须)wrapElement 指定包裹 NodeList 的 HTML 标签:

  • String - 指定 HTML 标签或者用来包裹的 DOM 元素的选择器字符串;
  • HTMLElement - 包裹的 DOM 元素,将实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签;
  • Function($node, index) - 获取包裹 HTML 标签的回调函数,可以返回 HTML 标签或者 DOM 元素:
    • 参数 $node:NodeList 中的 DOM 元素;
    • 参数 index:DOM 元素在 NodeList 中的索引值;
<ul id="list" class="list">
  <li class="item">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>
<div class="wrapper"></div>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 wrap 单个方法
import wrap from '@yaohaixiao/dom.js/wrap'

const $list = DOM.byId('#list')
const $items = DOM.byClass('.item', $list)

// 用 html 字符
DOM.wrap($items, '
') // -> <ul id="list" class="list"> // <div class="wrap"> // <li class="item">Home</li> // </div> // <div class="wrap"> // <li class="item">Blog</li> // </div> // <div class="wrap"> // <li class="item">Projects</li> // </div> // <div class="wrap"> // <li class="item">About</li> // </div> // </ul> // 用选择器获取 DOM 节点,实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签 wrap($items, '.wrapper') // -> <ul id="list" class="list"> // <div class="wrapper"> // <li class="item">Home</li> // </div> // <div class="wrapper"> // <li class="item">Blog</li> // </div> // <div class="wrapper"> // <li class="item">Projects</li> // </div> // <div class="wrapper"> // <li class="item">About</li> // </div> // </ul> // 实用 DOM 元素或者函数返回 DOM 元素的行为和使用选择器指定 DOM 元素的行为一致 wrap($items, DOM.getEl('.wrapper')) wrap($items, () => DOM.getEl('.wrapper')) // 回调函数返回 HTML 标签 wrap($items, ($item, index) => { return `<div data-id="${index}" class="wrap"><div>` }) // -> <ul id="list" class="list"> // <div data-id="0" class="wrap"> // <li class="item">Home</li> // </div> // <div data-id="1" class="wrap"> // <li class="item">Blog</li> // </div> // <div data-id="2" class="wrap"> // <li class="item">Projects</li> // </div> // <div data-id="3" class="wrap"> // <li class="item">About</li> // </div> // </ul>

wrapAll(collection, wrapElement)

Since

1.1.0

Category:
DOM Insertion

wrapAll() 方法用来给(以组邻近的)NodeList 包裹上指定的 HTML 标签。

Parameters

collection
Type:
NodeList

(必须)collection 需要包裹的 NodeList 列表。

wrapElement
Type:
String|HTMLElement

(必须)wrapElement 指定包裹 NodeList 的 HTML 标签:

  • String - 指定 HTML 标签或者用来包裹的 DOM 元素的选择器字符串;
  • HTMLElement - 包裹的 DOM 元素,将实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签;
<ul id="list" class="list">
  <li class="item">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>
<div class="wrapper"></div>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 wrap 单个方法
import wrapAll from '@yaohaixiao/dom.js/wrapAll'

const $list = DOM.byId('#list')
const $items = DOM.byClass('.item', $list)

// 用 html 字符
DOM.wrapAll($items, '
') // -> <ul id="list" class="list"> // <div class="wrap"> // <li class="item">Home</li> // <li class="item">Blog</li> // <li class="item">Projects</li> // <li class="item">About</li> // </div> // </ul> // 用选择器获取 DOM 节点,实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签 wrap($items, '.wrapper') // -> <ul id="list" class="list"> // <div class="wrapper"> // <li class="item">Home</li> // <li class="item">Blog</li> // <li class="item">Projects</li> // <li class="item">About</li> // </div> // </ul> // 使用 DOM 元素和使用选择器指定 DOM 元素的行为一致 wrap($items, DOM.getEl('.wrapper'))

wrapInner(collection, wrapElement)

Since

1.1.0

Category:
DOM Insertion

wrapInner() 方法用来给 NodeList 中的每个 DOM 节点内部包裹上指定 HTML 标签。

Parameters

collection
Type:
NodeList

(必须)collection 需要包裹的 NodeList 列表。

wrapElement
Type:
String|HTMLElement|Function

(必须)wrapElement 指定包裹 NodeList 的 HTML 标签:

  • String - 指定 HTML 标签或者用来包裹的 DOM 元素的选择器字符串;
  • HTMLElement - 包裹的 DOM 元素,将实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签;
  • Function($node, index) - 获取包裹 HTML 标签的回调函数,可以返回 HTML 标签或者 DOM 元素:
    • 参数 $node:NodeList 中的 DOM 元素;
    • 参数 index:DOM 元素在 NodeList 中的索引值;
<ul id="list" class="list">
  <li class="item">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>
<div class="wrapper"></div>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 wrapInner 单个方法
import wrapInner from '@yaohaixiao/dom.js/wrapInner'

const $list = DOM.byId('#list')
const $items = DOM.byClass('.item', $list)

// 用 html 字符
DOM.wrapInner($items, '
') // -> <ul id="list" class="list"> // <li class="item"> // <div class="wrap">Home</div> // </li> // <li class="item"> // <div class="wrap">Blog</div> // </li> // <li class="item"> // <div class="wrap">Projects</div> // </li> // <li class="item"> // <div class="wrap">About</div> // </li> // </ul> // 用选择器获取 DOM 节点,实用 DOM 元素的 outerHTML 作为包裹的 HTML 标签 wrapInner($items, '.wrapper') // -> <ul id="list" class="list"> // <li class="item"> // <div class="wrapper">Home</div> // </li> // <li class="item"> // <div class="wrapper">Blog</div> // </li> // <li class="item"> // <div class="wrapper">Projects</div> // </li> // <li class="item"> // <div class="wrapper">About</div> // </li> // </ul> // 实用 DOM 元素或者函数返回 DOM 元素的行为和使用选择器指定 DOM 元素的行为一致 wrapInner($items, DOM.getEl('.wrapper')) wrapInner($items, () => DOM.getEl('.wrapper')) // 回调函数返回 HTML 标签 wrapInner($items, ($item, index) => { return `<div data-id="${index}" class="wrap"><div>` }) // -> <ul id="list" class="list"> // <li class="item"> // <div data-id="0" class="wrap">Home</div> // </li> // <li class="item"> // <div data-id="1" class="wrap">Blog</div> // </li> // <li class="item"> // <div data-id="2" class="wrap">Projects</div> // </li> // <li class="item"> // <div data-id="3" class="wrap">About</div> // </li> // </ul>

Position

dom.js 提供以下几个方法用于获 DOM 元素的位置(offsetTop、offsetLeft、scrollTop、scrollLeft、pageX 和 pageY 等)信息。

getOffset(el)

Category:
Position

getOffset() 方法用来获取 DOM 节点相对于窗口的 top(纵坐标)值和 left(横坐标)值以及宽度和高度。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 offsetTop 和 offsetLeft 值。如果元素存在 offsetParent 的父节点,那么这个值会累加直到其祖先节点不再有 offsetParent。

width 和 height 则为 DOM 元素的 offsetWidth 和 offsetHeight 值。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getOffset 单个方法
import getOffset from '@yaohaixiao/dom.js/getOffset'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.getOffset($list)
// -> {
  top: 0,
  left: 0,
  width: 256,
  height: 64
}

getOffsetTop($home)
// -> {
  top: 0,
  left: 0,
  width: 64,
  height: 64
}

getOffsetLeft(el)

Category:
Position

getOffsetLeft() 方法用来获取 DOM 节点相对于窗口的 left(横坐标)值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 offsetLeft 值。如果元素存在 offsetParent 的父节点,那么这个值会累加直到其祖先节点不再有 offsetParent。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getOffsetLeft 单个方法
import getOffsetLeft from '@yaohaixiao/dom.js/getOffsetLeft'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $blog = DOM.getEl('.blog')
const $project = DOM.getEl('.project')

DOM.getOffsetLeft($list) // -> 0
getOffsetLeft($home) // -> 0
getOffsetLeft($blog) // -> 64
getOffsetLeft($project) // -> 128

getOffsetTop(el)

Category:
Position

getOffsetTop() 方法用来获取 DOM 节点相对于窗口的 top(纵坐标)值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 offsetTop 值。如果元素存在 offsetParent 的父节点,那么这个值会累加直到其祖先节点不再有 offsetParent。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getOffsetTop 单个方法
import getOffsetTop from '@yaohaixiao/dom.js/getOffsetTop'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $blog = DOM.getEl('.blog')
const $project = DOM.getEl('.project')

DOM.getOffsetTop($list) // -> 0
getOffsetTop($home) // -> 0
getOffsetTop($blog) // -> 64
getOffsetTop($project) // -> 128

getPageXY(el)

Category:
Position

getPageXY() 方法用来获取基于页面坐标获取元素的当前 X 和 Y 位置。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 DOM 元素在当前页面的 X 和 Y 位置。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPageXY 单个方法
import getPageXY from '@yaohaixiao/dom.js/getPageXY'

const $list = DOM.byId('#list')
const $project = DOM.getEl('.project')

DOM.getPageXY($list) // -> { x: 0, y: 0 }
getPageXY($project) // -> { x: 0, y: 128 }

getPageX(el)

Category:
Position

getPageX() 方法用来获取基于页面坐标获取元素的当前 X 位置。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 DOM 元素在当前页面的 X 位置:el.getBoundingClientRect().left + getDocumentScrollLeft()。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPageX 单个方法
import getPageX from '@yaohaixiao/dom.js/getPageX'

const $list = DOM.byId('#list')
const $project = DOM.getEl('.project')

DOM.getPageX($list) // -> 0
getPageX($project) // -> 128

getPageY(el)

Category:
Position

getPageY() 方法用来获取基于页面坐标获取元素的当前 Y 位置。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 DOM 元素在当前页面的 Y 位置:el.getBoundingClientRect().top + getDocumentScrollTop()。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPageY 单个方法
import getPageY from '@yaohaixiao/dom.js/getPageY'

const $list = DOM.byId('#list')
const $project = DOM.getEl('.project')

DOM.getPageY($list) // -> 0
getPageY($project) // -> 128

getDocumentScrollLeft(doc)

Category:
Size

getDocumentScrollLeft() 方法用来获取当前文档(窗口)滚动条的横向滚动的距离。

Parameters

doc
Type:
Document
Default:
document

(可选)doc 参数指定要获取滚动距离的文档。

Returns

Type:
Number

返回文档滚动的距离。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getDocumentScrollLeft 单个方法
import getDocumentScrollLeft from '@yaohaixiao/dom.js/getDocumentScrollLeft'

DOM.getDocumentScrollLeft() // -> 100

getDocumentScrollTop(doc)

Category:
Size

getDocumentScrollTop() 方法用来获取当前文档(窗口)滚动条的纵向滚动的距离。

Parameters

doc
Type:
Document
Default:
document

(可选)doc 参数指定要获取滚动距离的文档。

Returns

Type:
Number

返回文档滚动的距离。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getDocumentScrollTop 单个方法
import getDocumentScrollTop from '@yaohaixiao/dom.js/getDocumentScrollTop'

DOM.getDocumentScrollTop() // -> 100

getScroll(el)

Category:
Position

getScroll() 方法用来获取 DOM 元素的滚动条横向和纵向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条纵向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScroll 单个方法
import getScroll from '@yaohaixiao/dom.js/getScroll'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScroll($list) // -> { top: 0, left: 0 }

// 默认获取 window 当前窗口的滚动距离
getScroll() //-> { top: 0, left: 0 }

getScrollLeft(el)

Category:
Position

getScrollLeft() 方法用来获取 DOM 元素的滚动条横向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条横向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollLeft 单个方法
import getScrollLeft from '@yaohaixiao/dom.js/getScrollLeft'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScrollLeft($list) // -> 0

// 默认获取 window 当前窗口的滚动距离
getScrollLeft() // -> 0

getScrollTop(top)

Category:
Position

getScrollTop() 方法用来获取 DOM 元素的滚动条纵向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条纵向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollTop 单个方法
import getScrollTop from '@yaohaixiao/dom.js/getScrollTop'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScrollTop($list) // -> 0

// 默认获取 window 当前窗口的滚动距离
getScrollTop() // -> 0

getScrollTotal(el)

Category:
Position

getScrollTotal() 方法用来获取 DOM 元素的滚动条横向与纵向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条纵向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollTotal 单个方法
import getScrollTotal from '@yaohaixiao/dom.js/getScrollTotal'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScrollTotal($list) // -> { top: 0, left: 0 }

// 默认获取 window 当前窗口的滚动距离
getScrollTotal() // -> { top: 0, left: 0 }

getScrollTotalLeft(el)

Category:
Position

getScrollTotalLeft() 方法用来获取 DOM 节点预期所有父节点的横向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条横向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollTotalLeft 单个方法
import getScrollTotalLeft from '@yaohaixiao/dom.js/getScrollTotalLeft'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScrollTotalLeft($list) // -> 0

// 默认获取 window 当前窗口的滚动距离
getScrollTotalLeft() // -> 0

getScrollTotalTop(el)

Category:
Position

getScrollTotalTop() 方法用来获取 DOM 节点预期所有父节点的纵向滚动距离。

Parameters

el
Type:
HTMLElement|Window
Default:
window

(可选)el 参数指定 DOM 元素,未传递则默认为 window 对象。

Returns

Type:
Number

返回 DOM 元素的滚动条纵向滚动距离。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollTotalTop 单个方法
import getScrollTotalTop from '@yaohaixiao/dom.js/getScrollTotalTop'

const $list = DOM.byId('#list')

// 指定 DOM 元素
DOM.getScrollTotalTop($list) // -> 0

// 默认获取 window 当前窗口的滚动距离
getScrollTotalTop() // -> 0

offset(el)

Category:
Position
Alias:
getOffset

offset() 方法用来获取 DOM 节点相对于窗口的 top(纵坐标)值和 left(横坐标)值以及宽度和高度。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Number

返回 offsetTop 和 offsetLeft 值。如果元素存在 offsetParent 的父节点,那么这个值会累加直到其祖先节点不再有 offsetParent。

width 和 height 则为 DOM 元素的 offsetWidth 和 offsetHeight 值。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 offset 单个方法
import offset from '@yaohaixiao/dom.js/offset'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.offset($list)
// -> {
  top: 0,
  left: 0,
  width: 256,
  height: 64
}

offset($home)
// -> {
  top: 0,
  left: 0,
  width: 64,
  height: 64
}

positions(el)

Category:
Position

positions() 方法用来获取 DOM 节点的定位信息。当 DOM 元素不可见或不再当前文档中,则返回 false。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

Returns

Type:
Object|Boolean

返回 DOM 节点的定位信息。当 DOM 元素不可见或不再当前文档中,则返回 false。

<style>
.list {
  position: relative;
  z-index: 1;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 positions 单个方法
import positions from '@yaohaixiao/dom.js/positions'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.positions($list)
// -> {
  top: 0,
  left: 0,
  x: 0,
  y: 0
}

positions($home)
// -> {
  top: 0,
  left: 0,
  x: 0,
  y: 64
}

scrollTo(el, position[, direction, afterStop])

Category:
Position

scrollTo() 法用来将 DOM 节点滚动到指定位置。

Parameters

el
Type:
HTMLElement|String

(必须)el 参数指定 DOM 元素获取选择器字符串。

position
Type:
Number

(必须)position 参数指定 DOM 元素滚动的位置。

direction
Type:
String
Type:
'vertical'

(可选)direction 参数指定 DOM 元素滚动的方向:

  • vertical: (默认值)纵向滚动;
  • horizontal: 横向滚动;
afterStop
Type:
Function

(可选)afterStop 参数指定 DOM 元素滚动到指定的位置后,执行的回调函数。

<style>
.list {
  position: relative;
  z-index: 1;
  height: 128px;
  overflow: auto;
}
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
}
.item {
  margin: 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 scrollTo 单个方法
import scrollTo from '@yaohaixiao/dom.js/scrollTo'

const $list = DOM.byId('#list')

DOM.scrollTo($list, 64)
DOM.getScrollTop($list) // -> 64

scrollTo($list, 128, (pos) => {
  console.log('position:', pos) // -> 128
})

Platform Detection

dom.js 提供以下方法用以检测当前运行平台的相关信息。

isBrowser()

Since

1.4.0

Category:
Platform Detection

isBrowser() 方法用来检测当前运行环境是否为浏览器环境。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isBrowser 单个方法
import isBrowser from '@yaohaixiao/dom.js/isBrowser'

// 浏览器中运行
DOM.isBrowser() // -> true

// Node 环境中运行
isBrowser() // -> false

isDeno()

Since

1.5.0

Category:
Platform Detection

isDeno() 方法用来检测当前运行环境是否为 Deno 环境。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isDeno 单个方法
import isDeno from '@yaohaixiao/dom.js/isDeno'

// 浏览器中运行
DOM.isDeno() // -> false

// Node 环境中运行
isDeno() // -> false

// Deno 环境中运行
isDeno() // -> true

isNodeJs()

Since

1.5.0

Category:
Platform Detection

isNodeJs() 方法用来检测当前运行环境是否为浏览器环境。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isNodeJs 单个方法
import isNodeJs from '@yaohaixiao/dom.js/isNodeJs'

// 浏览器中运行
DOM.isNodeJs() // -> false

// Node 环境中运行
isNodeJs() // -> true

// Deno 环境中运行
isNodeJs() // -> false

isMobile()

Since

1.5.0

Category:
Platform Detection

isMobile() 方法用来检测当前运行设备是否为移动设备。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isMobile 单个方法
import isMobile from '@yaohaixiao/dom.js/isMobile'

// PC 浏览器中运行
DOM.isMobile() // -> false

// iPhone 等移动设备运行
isMobile() // -> true

isWebKit()

Since

1.5.0

Category:
Platform Detection

isWebKit() 方法用来检测当前浏览器内核是否为 WebKit 内核。

Returns
Type:
Boolean

返回检测结果。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 isWebKit 单个方法
import isWebKit from '@yaohaixiao/dom.js/isWebKit'

// Chrome/Opera/Edge 等 webkit 内核浏览器中运行
DOM.isWebKit() // -> true

// Firefox或者IE等非 webkit 内核浏览器中运行
isWebKit() // -> false

browser()

Since

1.5.0

Category:
Platform Detection

browser() 方法用来检测浏览器信息,返回浏览器名称和版本信息。

Returns
Type:
Object

返回检测结果,浏览器名称合版本信息。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 browser 单个方法
import browser from '@yaohaixiao/dom.js/browser'

// Chrome 浏览器中运行
DOM.browser() // -> {name: 'Chrome', major: 119, version: '119.0.0.0'}

// Edge 浏览器中运行
browser() // -> {name: 'Edge', major: 119, version: '119.0.0.0'}

// Firefox 浏览器中运行
browser() // -> { name: "Firefox", major: 120, version: "120.0" }

// Opera
browser() // -> {name: 'Opera', major: 105, version: '105.0.0.0'}

os()

Since

1.5.0

Category:
Platform Detection

os() 方法用来检测当前操作系统信息,返回操作名称合版本信息。

Returns
Type:
Object

返回检测结果,操作系统名称合版本信息。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 os 单个方法
import os from '@yaohaixiao/dom.js/os'

// Windows 系统浏览器中运行
DOM.os() // -> {name: 'Windows', version: '10'}

// Android 系统浏览器中运行
browser() // -> {name: 'Android', version: '7.1.1'}

// ios 系统浏览器中运行
browser() // -> {name: 'iOS', version: '16.6.0'}

Load Resources

dom.js 提供以下方法用以动态加载资源文件。

injectCSS(cssRules[, media, charset])

Since

1.4.0

Category:
Load Resources

injectCSS() 方法用来向当前文档动态插入 style 标签,以批量添加样式。返回动态创建的 style 标签节点。

Parameters

cssRules
Type:
String

(必须)cssRules 参数指定需要动态添加的 CSS 样式规则字符串。

media
Type:
String

(可选)media 参数指定 CSS 样式适用的媒体信息。

media
Type:
String

(可选)charset 参数指定 CSS 样式的字符集。

Returns

Type:
HTMLElement

返回动态创建的 style 标签节点。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 injectCSS 单个方法
import injectCSS from '@yaohaixiao/dom.js/injectCSS'

const rules = 'body {background-color: #f00;}'

DOM.injectCSS(rules)
// -> <style type="text/css">body{background-color:#f00;}</style>

injectCSS(rules, 'print', 'utf-8')
// -> <style media="print" type="text/css">
//       @charset "utf-8";body{background-color:#f00;}
//    </style>

loadCSS(cssURL[, media])

Since

1.7.0

Category:
Load Resources

loadCSS() 方法用来动态向页面中添加外部 css 样式文件。返回 Promise 对象。css 文件加载成功,执行 Promise.resolve(),加载失败则执行 Promise.reject()。

Parameters

cssURL
Type:
String

(必须)cssURL 参数指定外部 css 文件的 URL 地址。

media
Type:
String

(可选)media 参数指定 CSS 样式适用的媒体信息。

Returns
Type:
Promise

返回 Promise 对象。

Usage

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 loadCSS 单个方法
import loadCSS from '@yaohaixiao/dom.js/loadCSS'

DOM.loadCSS('path/to/exist.css', 'print').then(($link) => {
  // css 文件加载成功后的相关逻辑
  // $link 是创建的 link 标签 DOM 元素
  console.log($link)
})

loadCSS('path/to/not-exist.css').then(() => {
  // css 文件加载成功后的相关逻辑
)).catch((err) => {
  // css 文件加载失败后的相关逻辑
})

loadScript(jsURL)

Since

1.7.0

Category:
Load Resources

loadScript() 方法用来动态向页面中添加外部 js 样式文件。返回 Promise 对象。js 文件加载成功,执行 Promise.resolve(),加载失败则执行 Promise.reject()。

Parameters

jsURL
Type:
String

(必须)jsURL 参数指定外部 js 文件的 URL 地址。

jsURL
Type:
String

(可选)charset 参数指定外部 js 文件字符集编码。

Returns
Type:
Promise

返回 Promise 对象。

Usage

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 loadScript 单个方法
import loadScript from '@yaohaixiao/dom.js/loadScript'

DOM.loadScript('path/to/exist.js').then(($script) => {
  // js 文件加载成功后的相关逻辑
  // $script 是创建的 script 标签 DOM 元素
  console.log($script)
})

loadScript('path/to/not-exist.js').then(() => {
  // js 文件加载成功后的相关逻辑
)).catch((err) => {
  // js 文件加载失败后的相关逻辑
})

dnsPrefetch(domain)

Since

1.7.0

Category:
Load Resources

dnsPrefetch() 方法用来尝试在请求(第三方)资源之前预解析域名。用以优化加载解析第三方资源的性能。

Parameters

domain
Type:
String

(必须)domain 参数指定(第三方)域名。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 dnsPrefetch 单个方法
import dnsPrefetch from '@yaohaixiao/dom.js/dnsPrefetch'

// 在开始需要加载 github 和 google 站点的资源前先预解析两个站点的域名
DOM.dnsPrefetch('//github.com')
dnsPrefetch('https://fonts.google.com')

prefetch(url)

Since

1.7.0

Category:
Load Resources

prefetch() 方法用来链接预取(重要)资源。(可以根据用户数据分析)预取用户稍后会用到的(重要)资源(通常是 js 或者 css 文件),以优化前端性能。

Parameters

url
Type:
String

(必须)url 参数指定需要预加载的资源文件的 URL 地址。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prefetch 单个方法
import prefetch from '@yaohaixiao/dom.js/prefetch'

DOM.prefetch('/app/style.css')
prefetch('/app/app.js')

preload(url, options)

Since

1.7.0

Category:
Load Resources

preload() 方法用来链接预加载所有用户都会使用的(重要)资源。(可以根据用户数据分析)预加载公共的资源文件,以优化前端性能。

Parameters

url
Type:
String

(必须)url 参数指定需要预加载的资源文件的 URL 地址。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 preload 单个方法
import preload from '@yaohaixiao/dom.js/preload'

DOM.preload('/app/style.css', {
  as: 'style'
})

DOM.preload('/app/img.jpg', {
  as: 'image'
  type: 'image/jpeg'
})

DOM.dnsPrefetch('//www.google-analytics.com/')

// 跨域加载资源
preload('https://www.google-analytics.com/analytics.js', {
  as: 'script',
  crossorigin: 'anonymous'
})

Selecting Siblings

dom.js 提供以下几个方法用于获取指定 DOM 元素的邻居节点。

getNextSibling(el[, isElementSibling])

Category:
Selecting Siblings

getNextSibling() 方法用来获取 DOM 元素的下一个邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

Returns

Type:
HTMLElement|Text

返回 el 元素的下一个邻居元素节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getNextSibling 单个方法
import getNextSibling from '@yaohaixiao/dom.js/getNextSibling'

const $section = DOM.byClass('.section')

// 获取 HTMLElement 邻居节点
DOM.next($section) // -> <ul id="list" class="list">

// 获取 Text 文本邻居节点
const $text = next($section, false) // -> '文本内容'

// el 参数是 Text 文本节点类型
next($text) // -> <ul id="list" class="list">

getNextSiblingBy(el, filter)

Category:
Selecting Siblings

getNextSiblingBy() 方法用来通过过滤器获取 DOM 元素匹配的后面的邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

filter
Type:
Function|String

(必须)filter 参数指定用于过滤的回调函数或者选择器字符串。

Returns

Type:
HTMLElement|Text

返回 el 元素的下一个邻居元素节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getNextSiblingBy 单个方法
import getNextSiblingBy from '@yaohaixiao/dom.js/getNextSiblingBy'

const $section = DOM.byClass('.section')
const $home = DOM.byId('#home')

// filter 参数是选择器字符串,获取 HTMLElement 元素
DOM.getNextSiblingBy($section, '.item') // -> <ul id="list" class="list">

// 获取 Text 类型的邻居节点
getNextSiblingBy($section, (el) => {
   return DOM.isText(el)
})
// -> '文本内容'

// filter 参数是过滤函数,获取 HTMLElement 元素
getNextSiblingBy($home, (el) => {
  return DOM.hasClass(el, 'about')
})
// -> <li class="item about">About</li>

getNextSiblings(el[, isElementSibling])

Category:
Selecting Siblings

getNextSiblings() 方法用来获取 DOM 元素的后面所有邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement

返回 DOM 元素的后面所有邻居元素节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getNextSiblings 单个方法
import getNextSiblings from '@yaohaixiao/dom.js/getNextSiblings'

const $section = DOM.byClass('.section')
const $home = DOM.byId('#home')

// 仅获取 HTMLElement 类型邻居节点
DOM.getNextSiblings($section) // ->[ <ul id="list" class="list"> ]
getNextSiblings($home)
// -> [
//   <li class="item blog">Blog</li>,
//   <li class="item">Projects</li>,
//   <li class="item">About</li>
// ]

// 获取 HTMLElement 和 Text 类型邻居节点
DOM.getNextSiblings($section, false)
// ->[
//     '文本内容'
//     <ul id="list" class="list">
//   ]

getPreviousSibling(el[, isElementSibling])

Category:
Selecting Siblings

getPreviousSibling() 方法用来获取 DOM 元素的前一个邻居 HTMLElement 或者文本节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的前一个邻居节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPreviousSibling 单个方法
import getPreviousSibling from '@yaohaixiao/dom.js/getPreviousSibling'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $blog = DOM.getEl('.blog')

DOM.getPreviousSibling($list) // -> <div class="section">Section Content</div>
getPreviousSibling($list, false) // -> '文本内容'
getPreviousSibling($blog) // -> <li id="home" class="item active">Home</li>

getPreviousSiblingBy(el, filter)

Category:
Selecting Siblings

getPreviousSiblingBy() 方法用来通过过滤器获取 DOM 元素匹配的前面的邻居 HTMLElement 或者文本节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

filter
Type:
Function|String

(必须)filter 参数指定用于过滤的回调函数或者选择器字符串。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的下一个邻居节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li id="about" class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPreviousSiblingBy 单个方法
import getPreviousSiblingBy from '@yaohaixiao/dom.js/getPreviousSiblingBy'

const $list = DOM.byId('#list')
const $about = DOM.byId('#home')

DOM.getPreviousSiblingBy($about, '.item.about') // -> <li id="home" class="item active">Home</li>
getPreviousSiblingBy($about, (el) => {
  return DOM.hasClass(el, 'blog')
})
// -> <li class="item blog">Blog</li>

// 获取文本节点类型的邻居节点
const $text = getPreviousSiblingBy($about, (el) => {
   return DOM.isText(el)
})
// -> '文本内容'

getPreviousSiblingBy($text, '.section') // -> <div class="section">Section Content</div>

getPreviousSiblings(el[, isElementSibling])

Category:
Selecting Siblings

getPreviousSiblings() 方法用来获取 DOM 元素的前面所有邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的前面所有邻居节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getPreviousSiblings 单个方法
import getPreviousSiblings from '@yaohaixiao/dom.js/getPreviousSiblings'

const $list = DOM.byId('#list')
const $about = DOM.getEl('.about')

// 仅获取 HTMLElement 邻居节点
DOM.getPreviousSiblings($list)
// ->[
//   <div class="section">Section Content</div>
// ]

// 仅获取 HTMLElement 和节点邻居节点
DOM.getPreviousSiblings($list)
// ->[
//   '文本内容',
//   <div class="section">Section Content</div>
// ]

getPreviousSiblings($about)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>
// ]

getSiblings(el[, includeSelf = false, isElementSibling = true])

Category:
Selecting Siblings

getSiblings() 方法用来获取 DOM 元素的前面或后面所有邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

includeSelf
Type:
Boolean

(可选)includeSelf 参数指定是否包含 DOM 元素本身。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
Array

返回 DOM 元素的前面或后面所有邻居元素节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getSiblings 单个方法
import getSiblings from '@yaohaixiao/dom.js/getSiblings'

const $section = DOM.byClass('.section')
const $about = DOM.getEl('.about')

// 获取所有类型的邻居节点,包括自己
DOM.getSiblings($section, true, false)
// ->[
//     <div class="section">Section Content</div>
//     '文本内容'
//     <ul id="list" class="list">
//   ]

// 获取所有 HTMLElement 邻居节点,不包括自己
DOM.getSiblings($about)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>
// ]

// 获取所有 HTMLElement 邻居节点,包括自己
getPrevSiblings($about, true)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>,
//   <li class="item about">About</li>
// ]

next(el)

Category:
Selecting Siblings
Alias:
getNextSibling

next() 方法用来获取 DOM 元素的下一个邻居元素节点。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

Returns

Type:
HTMLElement

返回 DOM 元素的下一个邻居元素节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 next 单个方法
import next from '@yaohaixiao/dom.js/next'

const $section = DOM.byClass('.section')

// 获取 HTMLElement 邻居节点
DOM.next($section) // -> <ul id="list" class="list">

// 获取 Text 文本邻居节点
const $text = next($section, false) // -> '文本内容'

// el 参数是 Text 文本节点类型
next($text) // -> <ul id="list" class="list">

nextBy(el, filter)

Category:
Selecting Siblings
Alias:
getNextSiblingBy

nextBy() 方法用来通过过滤器获取 DOM 元素匹配的后面的邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

filter
Type:
Function|String

(必须)filter 参数指定用于过滤的回调函数或者选择器字符串。

Returns

Type:
HTMLElement|Text

返回 el 元素的下一个邻居元素节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 nextBy 单个方法
import nextBy from '@yaohaixiao/dom.js/nextBy'

const $section = DOM.byClass('.section')
const $home = DOM.byId('#home')

// filter 参数是选择器字符串,获取 HTMLElement 元素
DOM.nextBy($section, '.item') // -> <ul id="list" class="list">

// 获取 Text 类型的邻居节点
nextBy($section, (el) => {
   return DOM.isText(el)
})
// -> '文本内容'

// filter 参数是过滤函数,获取 HTMLElement 元素
nextBy($home, (el) => {
  return DOM.hasClass(el, 'about')
})
// -> <li class="item about">About</li>

nextAll(el[, isElementSibling])

Category:
Selecting Siblings
Alias:
getNextSiblings

nextAll() 方法用来获取 DOM 元素的后面所有邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement

返回 DOM 元素的后面所有邻居元素节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 nextAll 单个方法
import nextAll from '@yaohaixiao/dom.js/nextAll'

const $section = DOM.byClass('.section')
const $home = DOM.byId('#home')

// 仅获取 HTMLElement 类型邻居节点
DOM.getNextSiblings($section) // ->[ <ul id="list" class="list"> ]
getNextSiblings($home)
// -> [
//   <li class="item blog">Blog</li>,
//   <li class="item">Projects</li>,
//   <li class="item">About</li>
// ]

// 获取 HTMLElement 和 Text 类型邻居节点
DOM.getNextSiblings($section, false)
// ->[
//     '文本内容'
//     <ul id="list" class="list">
//   ]

prev(el[, isElementSibling])

Category:
Selecting Siblings
Alias:
getPrevSibling

prev() 方法用来获取 DOM 元素的前一个邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的前一个邻居节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prev 单个方法
import prev from '@yaohaixiao/dom.js/prev'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')
const $blog = DOM.getEl('.blog')

DOM.prev($list) // -> <div class="section">Section Content</div>
prev($list, false) // -> '文本内容'
prev($blog) // -> <li id="home" class="item active">Home</li>

prevBy(el, filter)

Category:
Selecting Siblings
Alias:
getPreviousSibling

prevBy() 方法用来通过过滤器获取 DOM 元素匹配的前面的邻居 HTMLElement 或者文本节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

filter
Type:
Function|String

(必须)filter 参数指定用于过滤的回调函数或者选择器字符串。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的下一个邻居节点。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li id="about" class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prevBy 单个方法
import prevBy from '@yaohaixiao/dom.js/prevBy'

const $list = DOM.byId('#list')
const $about = DOM.byId('#home')

DOM.prevBy($about, '.item.about') // -> <li id="home" class="item active">Home</li>
prevBy($about, (el) => {
  return DOM.hasClass(el, 'blog')
})
// -> <li class="item blog">Blog</li>

// 获取文本节点类型的邻居节点
const $text = prevBy($about, (el) => {
   return DOM.isText(el)
})
// -> '文本内容'

prevBy($text, '.section') // -> <div class="section">Section Content</div>

prevAll(el[, isElementSibling])

Category:
Selecting Siblings
Alias:
getPrevSiblings

prevAll() 方法用来获取 DOM 元素的前面所有邻居 HTMLElement 或者文本节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
HTMLElement|Text

返回 DOM 元素的前面所有邻居节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prevAll 单个方法
import prevAll from '@yaohaixiao/dom.js/prevAll'

const $list = DOM.byId('#list')
const $about = DOM.getEl('.about')

// 仅获取 HTMLElement 邻居节点
DOM.prevAll($list)
// ->[
//   <div class="section">Section Content</div>
// ]

// 仅获取 HTMLElement 和节点邻居节点
DOM.prevAll($list)
// ->[
//   '文本内容',
//   <div class="section">Section Content</div>
// ]

prevAll($about)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>
// ]

siblings(el[, includeSelf])

Category:
Selecting Siblings
Alias:
getSiblings

siblings() 方法用来获取 DOM 元素的前面或后面所有邻居元素节点。

Parameters

el
Type:
HTMLElement|Text

(必须)el 参数指定 DOM 元素(HTMLElement 或者 Text 类型)。

includeSelf
Type:
Boolean
Default:
false

(可选)includeSelf 参数指定是否包含 DOM 元素本身。

isElementSibling
Type:
Boolean
Default:
true

(可选)isElementSibling 参数指定是否仅获取 HTMLElement 元素节点,默认值:true。

Returns

Type:
Array

返回 DOM 元素的前面或后面所有邻居元素节点的数组,如果没有则返回空数组。

<div class="section">Section Content</div>
文本内容
<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item about">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 siblings 单个方法
import siblings from '@yaohaixiao/dom.js/siblings'

const $section = DOM.byClass('.section')
const $about = DOM.getEl('.about')

// 获取所有类型的邻居节点,包括自己
DOM.siblings($section, true, false)
// ->[
//     <div class="section">Section Content</div>
//     '文本内容'
//     <ul id="list" class="list">
//   ]

// 获取所有 HTMLElement 邻居节点,不包括自己
DOM.siblings($about)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>
// ]

// 获取所有 HTMLElement 邻居节点,包括自己
siblings($about, true)
// -> [
//   <li class="item">Projects</li>,
//   <li class="item blog">Blog</li>,
//   <li id="home" class="item active">Home</li>,
//   <li class="item about">About</li>
// ]

Size

dom.js 提供以下几个方法用于获取 DOM 元素的尺寸大小。

getDocumentHeight()

Category:
Size

getDocumentHeight() 方法用来获取当前页面(滚动条)的高度。

Returns

Type:
Number

返回文档的高度值。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getDocumentHeight 单个方法
import getDocumentHeight from '@yaohaixiao/dom.js/getDocumentHeight'

DOM.getDocumentHeight() // -> 800

getDocumentWidth()

Category:
Size

getDocumentWidth() 方法用来获取当前页面(滚动条)的宽度。

Returns

Type:
Number

返回文档的宽度值。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getDocumentWidth 单个方法
import getDocumentWidth from '@yaohaixiao/dom.js/getDocumentWidth'

DOM.getDocumentWidth() // -> 800

getViewportHeight()

Category:
Size

getViewportHeight() 方法用来获取当前窗口视口高度。

Returns

Type:
Number

返回窗口视口的高度值。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getViewportHeight 单个方法
import getViewportHeight from '@yaohaixiao/dom.js/getViewportHeight'

DOM.getViewportHeight() // -> 600

getViewportWidth()

Category:
Size

getViewportWidth() 方法用来获取当前窗口视口宽度。

Returns

Type:
Number

返回窗口视口的宽度值。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getViewportWidth 单个方法
import getViewportWidth from '@yaohaixiao/dom.js/getViewportWidth'

DOM.getViewportWidth() // -> 1280

getScreenHeight()

Since

1.4.0

Category:
Base

getScreenHeight() 方法用来获取显示器屏幕分辨率高度。

Returns
Type:
Number

返回显示器屏幕分辨率高度。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScreenHeight 单个方法
import getScreenHeight from '@yaohaixiao/dom.js/getScreenHeight'

DOM.getScreenHeight() // -> 1080
getScreenHeight() // -> 1080

getScreenWidth()

Since

1.4.0

Category:
Base

getScreenWidth() 方法用来获取显示器屏幕分辨率宽度。

Returns
Type:
Number

返回显示器屏幕分辨率宽度。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScreenWidth 单个方法
import getScreenWidth from '@yaohaixiao/dom.js/getScreenWidth'

DOM.getScreenWidth() // -> 1920
getScreenWidth() // -> 1920

getScrollbarWidth(el)

Since

1.4.0

Category:
Base

getScrollbarWidth(el) 方法用来获取当前窗口或者 DOM 元素纵向滚动条的宽度。

Parameters

el
Type:
HTMLElement

(可选)el 参数指定 DOM 元素,默认值:window。

Returns
Type:
Number

返回纵向滚动条的宽度。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getScrollbarWidth 单个方法
import getScrollbarWidth from '@yaohaixiao/dom.js/getScrollbarWidth'

const $list = DOM.byId('#list')

// 默认的窗口滚动条宽度
DOM.getScrollbarWidth() // -> 17

// 使用 CSS 美化有的滚动条宽度
getScrollbarWidth($list) // -> 7

innerHeight(el[, val])

Category:
Size

innerHeight() 方法用来获取或设置 DOM 元素的 innerHeight 值;innerHeight = style.height + padding 高度(paddingTop + paddingBottom)。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|String|Function

(可选)val 参数指定 DOM 元素的 innerHeight 高度或者获取 innerHeight 高度的处理函数。

Returns

Type:
Number

返回窗口视口的高度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 innerHeight 单个方法
import innerHeight from '@yaohaixiao/dom.js/innerHeight'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.innerHeight($list) // => 64
DOM.innerHeight($home) // => 60

innerHeight($home, 50)
DOM.getStyle($home, 'height') // => '30px'

// 使用回到函数获取自定义计算的 innerHeight 高度
innerHeight($home, (el, sizes) => {
  return sizes.offsetHeight - (sizes.borderTop + sizes.borderBottom + sizes.paddingTop + sizes.paddingBottom)
})
// -> 40

innerWidth(el[, val])

Category:
Size

innerWidth() 方法用来获取或设置 DOM 元素的 innerWidth 值;innerWidth = style.height + padding 宽度(paddingRight + paddingLeft)。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|Function

(可选)val 参数指定 DOM 元素的 innerWidth 高度或者获取 innerWidth 高度的处理函数。

Returns

Type:
Number

返回窗口视口的高度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  width: 40px;
  height: 40px;
  border: 2px;
  padding: 10px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 innerWidth 单个方法
import innerWidth from '@yaohaixiao/dom.js/innerWidth'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.innerWidth($list) // => 248
DOM.innerWidth($home) // => 60

innerWidth($home, 50)
DOM.getStyle($home, 'width') // => '30px'

// 使用回到函数获取自定义计算的 innerHeight 高度
innerWidth($home, (el, sizes) => {
  return sizes.offsetWidth - (sizes.borderRight + sizes.borderLeft + sizes.paddingRight + sizes.paddingLeft)
})
// -> 40

outerHeight(el[, val, includeMargin])

Category:
Size

outerHeight() 方法用来获取或设置 DOM 元素的 outerHeight 值:

  • 默认(不包含边距):outerHeight = style.height + border 高度(borderTop + borderBottom)+ padding 高度(paddingTop + paddingBottom);
  • 包含边距:outerHeight = style.height + margin 高度(marginTop + marginBottom) + border 高度(borderTop + borderBottom)+ padding 高度(paddingTop + paddingBottom);

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|String|Function|Boolean

(可选)val 参数指定 DOM 元素的 outerHeight 高度或者获取 outerHeight 高度的处理函数。

includeMargin
Type:
Boolean

(可选)指定 outerHeight 高度是否包含边距高度。

Returns

Type:
Number

返回窗口视口的高度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  margin: 5px 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 outerHeight 单个方法
import outerHeight from '@yaohaixiao/dom.js/outerHeight'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.outerHeight($list) // => 64
DOM.outerHeight($home, true) // => 74
DOM.outerHeight($home) // => 64

outerHeight($home, 70)
DOM.getStyle($home, 'height') // => '46px'

outerWidth(el[, val, includeMargin])

Category:
Size

outerWidth() 方法用来获取或设置 DOM 元素的 outerWidth 值:

  • 默认(不包含边距):outerWidth = style.width + border 宽度(borderRight + borderLeft)+ padding 宽度(paddingRight + paddingLeft);
  • 包含边距:outerWidth = style.width + margin 宽度(marginRight + marginLeft) + border 宽度(borderRight + borderLeft)+ padding 宽度(paddingRight + paddingLeft);

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|String|Function|Boolean

(可选)val 参数指定 DOM 元素的 outerWidth 高度或者获取 outerWidth 宽度的处理函数。

includeMargin
Type:
Boolean

(可选)指定 outerWidth 宽度是否包含边距宽度。

Returns

Type:
Number

返回窗口视口的高度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  margin: 5px 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 outerWidth 单个方法
import outerWidth from '@yaohaixiao/dom.js/outerWidth'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.outerWidth($list) // => 248
DOM.outerWidth($home, true) // => 74
DOM.outerWidth($home) // => 64

outerWidth($home, 70)
DOM.getStyle($home, 'width') // => '46px'

height(el[, val])

Category:
Size

height() 方法用来获取或设置 DOM 元素的高度。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|String

(可选)val 参数指定高度值。

Returns

Type:
Number

返回 DOM 元素的高度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 height 单个方法
import height from '@yaohaixiao/dom.js/height'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.height($list) // => 64
height($home) // => 64

height($home, 50)
DOM.getStyle($home, 'height') // -> '50px'
DOM.getOffsetHeight($home) // -> 74

width(el[, val])

Category:
Size

width() 方法用来获取或设置 DOM 元素的宽度。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

val
Type:
Number|String

(可选)val 参数指定宽度值。

Returns

Type:
Number

返回 DOM 元素的宽度值。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 width 单个方法
import width from '@yaohaixiao/dom.js/width'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.width($list) // => 256
width($home) // => 64

width($home, 50)
DOM.getStyle($home, 'width') // -> '50px'
DOM.getOffsetWidth($home) // -> 74

sizes(el)

Category:
Size

sizes() 方法用来获取DOM 元素的尺寸信息,数据格式如下:

{
  offsetHeight: 210,
  offsetWidth: 1625,
  innerHeight: 210,
  innerWidth": 1625,
  outerHeight: 210,
  outerWidth: 1625,
  margin: {
    top: 0,
    right: 0,
    bottom: 0,
    left: 0
  },
  border: {
    top: 0,
    right: 0,
    bottom: 0,
    left: 0
  },
  padding: {
    top: 70,
    right: 0,
    bottom: 0,
    left: 0
  },
  rect: {
    x: 274,
    y: 14,
    width: 1625,
    height: 210,
    top: 14,
    right: 1899,
    bottom: 224,
    left: 274
  }
}

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

Returns

Type:
Object

返回 DOM 元素相关的尺寸信息。

<style>
.list,
.item {
  margin: 0;
  padding: 0;
  list-style-type: none;
  overflow: hidden;
}
.item {
  float: left;
  margin: 5px 0;
  border: 2px;
  padding: 10px;
  height: 40px;
  overflow: hidden;
}
</style>

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 sizes 单个方法
import sizes from '@yaohaixiao/dom.js/sizes'

const $list = DOM.byId('#list')
const $home = DOM.byId('#home')

DOM.sizes($list)
sizes($home)

Style

dom.js 提供以下几个方法用以获取或者设置 DOM 元素的 css 样式属性:

getStyle(el, attr)

Description

Category:
Style

getStyle() 用来获取 DOM 元素的某个 CSS 样式值。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

attr
Type:
String

(必须)指定 CSS 属性名称。

Returns

Type:
String

返回指定的 attr 的属性值。

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setStyle 单个方法
import setStyle from '@yaohaixiao/dom.js/setStyle'

const $list = DOM.byId('#list')

DOM.setStyle($list, 'display', 'none')
DOM.setStyle($list, 'display', 'block')

setStyle($list, 'background-color', '#f2f2f2')

DOM.getStyle($list, 'background-color') // -> '#f2f2f2'
getStyle($list, 'display') // -> 'block'

setStyle(el, attr, val)

Category:
Style

setStyle() 方法用来给 DOM 元素添加 CSS 样式。

Parameters

el
Type:
HTMLElement

(必须)主题名称。

attr
Type:
String

(必须)属性名称。

val
Type:
String

(必须)属性值。

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 addClass 单个方法
import setStyle from '@yaohaixiao/dom.js/setStyle'

const $list = DOM.byId('#list')

DOM.setStyle($list, 'display', 'none')
DOM.setStyle($list, 'display', 'block')

setStyle($list, 'background-color', '#f2f2f2')

getStyles(el, attrs)

Category:
Style

getStyles() 方法用来获取 DOM 元素 attrs 数组中指定的多个 CSS 样式值。

Parameters

el
Type:
HTMLElement

(可选)options 中的属性名称或者要配置的 attrs 信息。

attrs
Type:
Array

(可选)要获取的 CSS 样式的名称数组

  • 不传递任何参数:返回完整的 attrs 配置信息;
  • attrs 为数组:返回 DOM 元素 attrs 数组中指定的多个 CSS 样式值

Returns

Type:
Any

配置信息 attrs 的属性值或者 Outline 对象。

<style>
  .list {
    background-color: '#fff';
    color: '#222';
    font-size: 13px;
  }
</style>

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getStyles 单个方法
import getStyles from '@yaohaixiao/dom.js/getStyles'

const $list = DOM.byId('#list')

// 参数非法
DOM.getStyles($list) // -> null
DOM.getStyles($list, 'display') // -> null
getStyles($list, []) // -> null

getStyles($list, ['background-color']) // -> {backgroundColor: '#fff'}
getStyles($list, ['color', 'font-size']) // -> {color: '#222', fontSize: '13px'}

setStyles(el, styles)

Category:
Style

setStyles() 方法用来给 DOM 元素批量添加 CSS 样式。

Parameters

el
Type:
HTMLElement

(必须)主题名称。

styles
Type:
Object|String

(必须)主题名称。

<ul id="list" class="list">
    <li class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setStyles 单个方法
import setStyles from '@yaohaixiao/dom.js/setStyles'

const $list = DOM.byId('#list')

DOM.setStyle($list, {
  display: 'none',
  'background-color': '#f2f2f2'
))
setStyles($list, {
  'float': 'left',
  'overflow': 'hidden'
})

DOM.getStyle($list, 'background-color') // -> '#f2f2f2'
getStyle($list, 'overflow') // -> 'hidden'

getProperty(prop)

Category:
Style

getProperty() 用来获取 CSS 变量(属性)值。

Parameters

prop
Type:
String

(必须)CSS 属性名称。

Returns

Type:
String

返回一个 DOMString ,其中包含请求的 CSS 属性的值。

<style>
  :root {
    --outline-zIndex: 2000;
    --outline-sticky-height: 100%;
    --outline-chapters-width: 100%;
  }
</style>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getProperty 单个方法
import getProperty from '@yaohaixiao/dom.js/getProperty'

DOM.getProperty('--outline-zIndex') // => '2000'
getProperty('--outline-sticky-height') // => '100%'
getProperty('--outline-chapters-width') // => '100%'

setProperty(prop, value)

Category:
Style

setProperty() 用来为一个声明了 CSS 样式的对象设置一个新的值。

Parameters

prop
Type:
String

(必须)CSS 属性名称。

value
Type:
String

(必须)CSS 属性值。

<style>
  :root {
    --outline - zIndex: 2000;
  }
</style>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 setProperty 单个方法
import setProperty from '@yaohaixiao/dom.js/setProperty'

// 设置属性
DOM.setProperty('--outline-sticky-height', '100%')
setProperty('--outline-chapters-width', '100%')

// 获取属性值
DOM.getProperty('--outline-zIndex') // => '2000'
DOM.getProperty('--outline-sticky-height') // => '100%'
DOM.getProperty('--outline-chapters-width') // => '100%'

css(el, attr[, value])

Category:
Style

css() 方法用来设置或者查询 DOM 元素的 CSS 样式。

Parameters

el
Type:
String

(必须)el 参数指定 DOM 元素。

attr
Type:
String|Object|Array

(必须)指定 CSS 属性名称。

value
Type:
String
Default:
true

(可选) 要设置的 CSS 属性值。

Returns

Type:
Object|String

返回指定的单个或者 attr 的属性值。

<ul id="list" class="list">
  <li class="item active">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 css 单个方法
import css from '@yaohaixiao/dom.js/css'

const $list = DOM.byId('#list')

// 设置单个 CSS 属性值
DOM.css($list, 'display', 'none')
css($list, 'display', 'block')

// 设置多个 CSS 属性值
setStyle($list, {
  'background-color': '#f2f2f2',
  'float': 'left'
})

// 获取单个 CSS 属性值
css($list, 'display') // -> 'block'

// 获取多个 CSS 属性值
css($list, ['background-color', 'float'])
// -> {
//      'background-color': '#f2f2f2',
//      'float': 'left'
//    }

prop(prop[, value])

Category:
Style

prop() 方法用来获取 CSS 样式的属性或者为一个声明了 CSS 样式的对象设置一个新的值。

Parameters

prop
Type:
String

(必须)CSS 属性名称。

value
Type:
String

(必须)CSS 属性值。

<style>
  :root {
    --outline - zIndex: 2000;
  }
</style>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 prop 单个方法
import prop from '@yaohaixiao/dom.js/prop'

// 设置属性
DOM.prop('--outline-sticky-height', '100%')
prop('--outline-chapters-width', '100%')

// 获取属性值
prop('--outline-zIndex') // => '2000'
prop('--outline-sticky-height') // => '100%'
prop('--outline-chapters-width') // => '100%'

show(el)

Since

0.5.0

Category:
Style

show() 方法用来显示指定的 DOM 元素。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

<ul id="list" class="list">
  <li class="item active">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 show 单个方法
import show from '@yaohaixiao/dom.js/show'

const $list = DOM.byId('#list')

// 隐藏 $list
DOM.hide($list)
DOM.getStyle($list, 'display') // -> 'hidden'

// 显示 $list
show($list)
DOM.getStyle($list, 'display') // -> 'block'

hide(el)

Since

1.1.0

Category:
Style

hide() 方法用来隐藏指定的 DOM 元素。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

<ul id="list" class="list">
  <li class="item active">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 hide 单个方法
import hide from '@yaohaixiao/dom.js/hide'

const $list = DOM.byId('#list')

// 隐藏 $list
DOM.hide($list)
DOM.getStyle($list, 'display') // -> 'hidden'

// 显示 $list
DOM.toggle($list)
DOM.getStyle($list, 'display') // -> 'block'

toggle(el)

Category:
Style

toggle() 方法用来设置 DOM 元素的显示和隐藏。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定 DOM 元素。

<ul id="list" class="list">
  <li class="item active">Home</li>
  <li class="item">Blog</li>
  <li class="item">Projects</li>
  <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 toggle 单个方法
import toggle from '@yaohaixiao/dom.js/toggle'

const $list = DOM.byId('#list')

// 隐藏 $list
DOM.toggle($list)
DOM.getStyle($list, 'display') // -> 'hidden'

// 显示 $list
toggle($list)
DOM.getStyle($list, 'display') // -> 'block'

Node Type Detection

dom.js 提供以下方法用于检测 DOM 元素的 Node Type 类型。

isCollection(el)

Category:
Node Type Detection

isCollection() 方法用来检测测试数据是否为 HTMLNodeList (元素集合)类型。

Parameters

el
Type:
Any

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测数据是 HTMLNodeList (元素集合)类型,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isCollection() 方法
import isCollection from '@yaohaixiao/types.js/isCollection'

const $list = document.getElementById('list')
const $div = document.createElement('div')
const $text = document.createTextNode('text')
const $items = document.querySelectorAll('.item')
const $fragment = document.createDocumentFragment()

DOM.isElement($list) // -> true
DOM.isCollection($list) // -> false

DOM.isElement($div) // -> true
DOM.isCollection($div) // -> false

DOM.isElement($text) // -> false
DOM.isCollection($text) // -> false

DOM.isElement($items) // -> false
isCollection($items) // -> true

DOM.isElement($fragment) // -> false
isCollection($fragment) // -> false

isDOM(el)

Category:
Node Type Detection

isDOM() 方法用来检测测试数据是否为 DOM 类型数据:DOM 节点,TextNode,NodeList 和 DocumentFragment)。

Parameters

el
Type:
Object

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测数据是 DOM 类型数据,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isTextNode() 方法
import isDOM from '@yaohaixiao/dom.js/isDOM'

const $list = document.getElementById('list')
const $fragment = document.createDocumentFragment()
const $items = document.querySelectorAll('.item')
const $text = document.createTextNode('text')

DOM.isDOM($list) // -> true
DOM.isDOM($fragment) // -> true
DOM.isElement($items) // -> false
isDOM($items) // -> true
isTextNode($text) // -> true
isDOM($text) // -> true

isElement(el)

Category:
Node Type Detection

isElement() 方法用来检测测试数据是否为 HTMLElement (元素节点)类型。

Category:
Lang

Parameters

el
Type:
Any

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测数据是 HTMLElement (元素节点)类型,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isElement() 方法
import isElement from '@yaohaixiao/dom.js/isElement'

const $list = document.getElementById('list')
const $div = document.createElement('div')
const $text = document.createTextNode('text')
const $items = document.querySelectorAll('.item')
const $fragment = document.createDocumentFragment()

DOM.isElement($list) // -> true
DOM.isElement($div) // -> true
DOM.isElement($text) // -> false
isElement($items) // -> false
isElement($fragment) // -> false

isFragment(el)

Category:
Node Type Detection

isFragment() 方法用来检测测试数据是否为 DocumentFragment 文档碎片。

Parameters

el
Type:
Any

(必须)val 待检测的数据。

Returns

Type:
Boolean。

true - 表示检测数据是 DocumentFragment 文档碎片,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isFragment() 方法
import isFragment from '@yaohaixiao/dom.js/isFragment'

const $list = document.getElementById('list')
const $div = document.createElement('div')
const $text = document.createTextNode('text')
const $items = document.querySelectorAll('.item')
const $fragment = document.createDocumentFragment()

DOM.isElement($list) // -> true
DOM.isFragment($list) // -> false

DOM.isElement($div) // -> true
DOM.isFragment($div) // -> false

DOM.isElement($text) // -> false
DOM.isFragment($text) // -> false

DOM.isElement($items) // -> false
isFragment($items) // -> false

DOM.isElement($fragment) // -> false
isFragment($fragment) // -> true

isNode(node)

Since:
1.6.0

isNode() 方法用来检测指定对象是否为 Node (接口)实例。相较于 isDOM() 方法,isNode() 方法可以检测更多类型的(Node)对象。以下接口都从 Node 继承其方法和属性:

  1. Document
  2. Element
  3. Attr
  4. CharacterData (which Text, Comment, and CDATASection inherit)
  5. ProcessingInstruction,
  6. DocumentFragment
  7. DocumentType
  8. Notation
  9. Entity
  10. EntityReference

Parameters

node
Type:
Node

(必须)node 参数指定待检测的对象。

Returns

Type:
Boolean。

true - 表示检测数据是 Node (接口)实例,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isTextNode() 方法
import isNode from '@yaohaixiao/dom.js/isNode'

const $list = document.getElementById('list')
const $fragment = document.createDocumentFragment()
const $items = document.querySelectorAll('.item')
const $text = document.createTextNode('text')

DOM.isNode($list) // -> true
DOM.isNode($fragment) // -> true
DOM.isNode($items) // -> true

isNode($items) // -> true
isNode($text) // -> true
isNode($text) // -> true
isNode(document) // -> true

isOverflowElement(el)

Since

1.7.0

Category:
Node Type Detection

isOverflowElement() 方法用来检测 DOM 元素是否设置了 overflow 属性。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测数 DOM 元素设置了overflow 属性,false 则表示没有设置。

.list {
  margin:0 auto;
  height: 32px;
  overflow: auto;
}

.host {
  margin:0 auto;
  height: 32px;
}

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isOverflowElement() 方法
import isOverflowElement from '@yaohaixiao/dom.js/isOverflowElement'

const $list = DOM.byClass('.list')
const $host = DOM.byClass('.host')

DOM.isOverflowElement($list) // -> true
isOverflowElement($host) // -> false

isShadowRoot(node)

Since

1.6.0

Category:
Node Type Detection

isShadowRoot() 方法用来检测目标 node 是否一个 DOM 子树的根节点。

Parameters

el
Type:
Any

(必须)node 参数指定待检测的 Node 实例。

Returns

Type:
Boolean。

true - 表示检测数据是 ShadowRoot,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isShadowRoot() 方法
import isShadowRoot from '@yaohaixiao/dom.js/isShadowRoot'

const $list = document.getElementById('list')

const host = document.querySelector("#host")
const shadow = host.attachShadow({ mode: "open" })
const span = document.createElement("span")

span.textContent = "I'm in the shadow DOM"
shadow.appendChild(span)

DOM.isShadowRoot($list) // -> false
isShadowRoot(shadow) // -> true

isTableElement(node)

Since

1.7.0

Category:
Node Type Detection

isTableElement() 方法用来检测 DOM 元素是为 table 列表类的元素。

Parameters

el
Type:
Any

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测 DOM 元素是 table 列表类的元素,false 则表示不是。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

<table class="table">
   <thead class="thead">
      <tr>
           <th>名称</th>
           <th>说明</th>
      </tr>
   </thead>
   <tbody class="tbody">
      <tr>
           <td>Table</td>
           <td>表格标签</td>
      </tr>
   </thead>
</table>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isTableElement() 方法
import isTableElement from '@yaohaixiao/dom.js/isTableElement'

const $list = DOM.byClass('.list')
const $table = DOM.byClass(".table")

DOM.isTableElement($list) // -> false
isTableElement($table) // -> true

isText(el)

Category:
Node Type Detection

isText() 方法用来检测测试数据是否为 HTMLTextNode (文本节点)类型。

Parameters

el
Type:
Any

(必须)el 参数指定待检测的 DOM 元素。

Returns

Type:
Boolean。

true - 表示检测数据是 HTMLTextNode (文本节点)类型,false 则表示不是。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom'
// 或者单独引用 isText() 方法
import isText from '@yaohaixiao/dom.js/isText'

const $list = document.getElementById('list')
const $div = document.createElement('div')
const $fragment = document.createDocumentFragment()
const $items = document.querySelectorAll('.item')
const $text = document.createTextNode('text')

DOM.isElement($list) // -> true
DOM.isText($list) // -> false

DOM.isElement($div) // -> true
DOM.isText($div) // -> false

DOM.isFragment($fragment) // -> true
DOM.isText($fragment) // -> false

DOM.isCollection($items) // -> true
isText($items) // -> false

DOM.isElement($text) // -> false
isText($text) // -> true

Observer

dom.js 提供以下方法用以处理对 DOM 树或者元素变化进行观察的相关操作。

observeIntersections(el, fn[, props = {}])

Since

1.7.0

Category:
Observer

observeIntersections() 方法是一个通用的 IntersectionObserver 观察者处理器。提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定用作边界盒的元素或文档。如果构造函数未传入 root 或其值为null,则默认使用顶级文档的视口。

fn
Type:
Function

(必须)fn 参数指定 el 元素下需要观察的 DOM 元素出发观察条件时出发的回调函数。

props
Type:
Object

(可选)props 指定传递到 IntersectionObserver() 构造函数的 options 对象。

Returns
Type:
Object

返回 IntersectionObserver 对象(实例)。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 observeIntersections 单个方法
import observeIntersections from '@yaohaixiao/dom.js/observeIntersections'

const $list = DOM.getEl('#list')
const $blog = DOM.getEl('.blog')

// $list 菜单中的 .item 元素滚动到 list (可见)区域的 10%的时候出发
// target 指当前出发观察条件的 DOM 元素
DOM.observeIntersections($list, (target) => {
  console.log('指当前出发观察条件的 DOM 元素:' target)
}, {
  selector: '.item',
  intersectionRatio: 0.1
})

observeMutations(el, fn[, props = {}])

Since

1.7.0

Category:
Observer

observeMutations() 方法是一个通用的 MutationObserver 观察者处理器。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要观察的 DOM 元素。

fn
Type:
Function

(必须)fn 参数指定 DOM 元素观察的属性发生改变时出发的回调函数。

props
Type:
Object

(可选)DOM 元素需要观察的属性。

Returns
Type:
Object

返回 MutationObserver 对象(实例)。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 observeMutations 单个方法
import observeMutations from '@yaohaixiao/dom.js/observeMutations'

const $list = DOM.getEl('#list')
const $blog = DOM.getEl('.blog')

// mr 代表 DOM 元素改变时记录的 MutationRecord 对象
DOM.observeMutations($list, (mr) => {
  console.log('list 发生改变:' mr)
})
DOM.observeMutations($blog, (mr) => {
  console.log('blog 发生改变:' mr)
})

DOM.hide($blog)
// -> blog 发生改变:blog 改变记录的 MutationRecord 对象
// -> list 发生改变:list 改变记录的 MutationRecord 对象

observeResize(el, fn[, delay = 300])

Since

1.8.0

Category:
Observer

observeResize() 方法是一个通用的 ResizeObserver 观察者处理器。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定需要观察的 DOM 元素。

fn
Type:
Function

(必须)fn 参数指定 DOM 元素观察到发生尺寸改变时出发的回调函数。

delay
Type:
Number
Default:
300

(可选)delay 参数指定 DOM 元素观察到发生尺寸改变时出发的回调函数执行的防抖处理的时间间隔(单位:毫秒)。

Returns
Type:
Object

返回 ResizeObserver 对象(实例)。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item project">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 observeResize 单个方法
import observeResize from '@yaohaixiao/dom.js/observeResize'

const $list = DOM.getEl('#list')
const $blog = DOM.getEl('.blog')

// entry 代表 DOM 元素改变时记录的 ResizeObserverEntry 对象
DOM.observeMutations($list, (entry) => {
  console.log('list 发生 resize:' entry)
})
DOM.observeMutations($blog, (entry) => {
  console.log('blog 发生resize:' entry)
})

DOM.css($blog, {
  width: '200px'
})
// -> blog 发生改变:blog 改变记录的 ResizeObserverEntry 对象

DOM.css($list, {
  width: '200px'
})
// -> list 发生改变:list 改变记录的 ResizeObserverEntry 对象

Others

dom.js 提供以下方法用以处理一些常用 DOM 操作。

copyToClipboard(str)

Since

1.4.0

Category:
Others

copyToClipboard() 方法用于复制指定文本内容到粘贴板。

Parameters

str
Type:
String

(必须)需要复制的文本字符串。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 copyToClipboard 单个方法
import copyToClipboard from '@yaohaixiao/dom.js/copyToClipboard'

DOM.copyToClipboard('http://www.yaohaixiao.com')
copyToClipboard('https://github.com/yaohaixiao/dom.js')

createAndDownloadFile(fileName, content)

Since

1.4.0

Category:
Others

createAndDownloadFile() 方法用来(通过文本)创建二进制的文件并下载文件。

Parameters

fileName
Type:
String

(必须)下载的文件名称。

content
Type:
Blob|String
  • Blob:二进制内容;
  • String:文本内容;

(必须)下载文件的主体内容。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 createAndDownloadFile 单个方法
import createAndDownloadFile from '@yaohaixiao/dom.js/createAndDownloadFile'

// 创建一个 age.js 文件,并下载
DOM.createAndDownloadFile('age.js', 'var age = 32')
createAndDownloadFile('readme.md', '# createAndDownloadFile')

fullscreen(mode, el)

Since

1.6.0

Category:
Others

指定(某个DOM元素)进入或者退出全屏模式。

Parameters

mode
Type:
Boolean
Default:
true

(可选)是否进入全屏模式。默认进入全屏模式。

el
Type:
String
Default:
'body'

(可选)指定 DOM 节点的选择器。默认节点为 document.body。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item blog">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 fullscreen 单个方法
import fullscreen from '@yaohaixiao/dom.js/fullscreen'

const $list = DOM.getEl('#list')

// 整个页面进入或者全屏模式
DOM.fullscreen(true)
DOM.fullscreen(false)

// 仅 $list 菜单进入或者全屏模式
fullscreen(true, $list)
fullscreen(false, $list)

getSelectedText()

Since

1.7.0

Category:
Others

getSelectedText() 返回页面中选中的文本内容。

Returns
Type:
String

返回页面中选中的文本内容。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getSelectedText 单个方法
import getSelectedText from '@yaohaixiao/dom.js/getSelectedText'

// 返回页面中选中的文本内容。
DOM.getSelectedText()
getSelectedText()

getURLProps(url = location.href)

Since

1.4.0

Category:
Others

getURLProps() 方法用来解析 URL 地址中的相关属性,返回解析 URL 后的对象数据。

Parameters

url
Type:
String
Default:
location.href

(可选)url 参数指定要解析的 URL 地址字符串,默认值:页面当前 URL 地址。

Returns
Type:
Object

返回解析 URL 后的对象数据。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getURLProps 单个方法
import getURLProps from '@yaohaixiao/dom.js/getURLProps'

// 获取当前页面地址:的 URL 信息
DOM.getURLProps()
// => {
//   "protocol":"https",
//   "username":"",
//   "password":"",
//   "hostname":"github.com",
//   "port":"",
//   "host":"github.com",
//   "pathname":"/yaohaixiao/dom.js",
//   "search":"",
//   "path":"/yaohaixiao/dom.js",
//   "hash":"",
//   "href":"https://github.com/yaohaixiao/dom.js",
//   "origin":"https://github.com"
// }

getURLProps('https://yaohaixiao:1232@github.com:2034/yaohaixiao/types.js/blob/main/_getURLPattern.js?search=URLSearchParams#google')
// => {
//   "protocol":"https",
//   "username":"yaohaixiao",
//   "password":"1232",
//   "hostname":"github.com",
//   "port":"2034",
//   "host":"github.com:2034",
//   "pathname":"/yaohaixiao/types.js/blob/main/_getURLPattern.js",
//   "search":"?search=URLSearchParams",
//   "path":"/yaohaixiao/types.js/blob/main/_getURLPattern.js?search=URLSearchParams",
//   "hash":"#google",
//   "href":"https://www.yaohaixiao.com:1232@github.com:2034/yaohaixiao/types.js/blob/main/_getURLPattern.js?search=URLSearchParams#google",
//   "origin":"https://github.com:2034"}
// }

getURLSearchParams(url = location.search)

Since

1.4.0

Category:
Others

getURLSearchParams() 方法用来获取 URL 地址字符串中查询字符串解析后的对象数据。

Parameters

url
Type:
String
Default:
location.search

url 参数指定 URL 地址字符串,默认值:当前 URL 地址的查询字符串。

Returns
Type:
Object

返回 URL 地址字符串中查询字符串解析后的对象数据。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getURLSearchParams 单个方法
import getURLSearchParams from '@yaohaixiao/dom.js/getURLSearchParams'

const url = 'http://www.yaohaixiao.com/?s=getURLSearchParams&tag=JavaScript'

// 当前 URL 地址:http://www.yaohaixiao.com/?s=getURLSearchParams
DOM.getURLSearchParams() // -> {s: 'getURLSearchParams'}

getURLSearchParams(url) // -> {s: 'getURLSearchParams', tag: 'JavaScript'}

getURLSearchParamByName(prop)

Since

1.4.0

Category:
Others

getURLSearchParamByName() 方法用来获取当前 URL 地址字符串中查询字符串解析后的对象数据的某个属性值。

Parameters

url
Type:
String
Default:
prop

指定要查询的属性名称。

Returns
Type:
Object

返回 URL 地址字符串中查询字符串解析后的对象数据的属性值。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 getURLSearchParams 单个方法
import getURLSearchParams from '@yaohaixiao/dom.js/getURLSearchParams'

// 当前 URL 地址:http://www.yaohaixiao.com/?s=getURLSearchParams
DOM.getURLSearchParamByName('s') // -> 'getURLSearchParams'

// 当前 URL 地址:'http://www.yaohaixiao.com/?s=getURLSearchParams&tag=JavaScript'
getURLSearchParamByName(tag) // 'JavaScript'

onClickOutside(el, callback)

Since

1.7.0

Category:
Others

onClickOutside() 方法用来处理点击 el 元素以外后执行一些操作。通常用于在弹出窗口后菜单后,点击页面其它 DOM 元素,隐藏弹出的窗口或者菜单。

Parameters

el
Type:
HTMLElement

(必须)el 参数指定要 DOM 元素。

callback
Type:
Function

(必须)Function 参数指定点击后要执行的回调函数。

<ul id="list" class="list">
    <li id="home" class="item active">Home</li>
    <li class="item">Blog</li>
    <li class="item">Projects</li>
    <li class="item">About</li>
</ul>

// 窗口可见
<div id="user" class="popper">User</div>

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 onClickOutside 单个方法
import onClickOutside from '@yaohaixiao/dom.js/onClickOutside'

const $list = DOM.getEl('#list')
const $popper = DOM.getEl('#user')

DOM.onClickOutside($popper, () => {
  DOM.hide($popper)
  console.log('关闭用户信息弹窗')
})

onClickOutside($list, () => {
  DOM.hide($list)
  console.log('关闭导航菜单')
})

$list.click() // '关闭用户信息弹窗'

openURL(url, target = '_blank')

Since

1.4.0

Category:
Others

openURL() 方法打开指定 URL 页面。

Parameters

url
Type:
String

(必须)需要打开的文件 URL 地址。

target
Type:
String
Default:
'_blank'

(可选)打开方式,默认值:_blank - 新窗口打开。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 openURL 单个方法
import openURL from '@yaohaixiao/dom.js/openURL'

// 新窗口打开
DOM.openURL('http://www.yaohaixiao.com')

// 本窗口打开
openURL('https://github.com/yaohaixiao/dom.js', '_self')

pixel(val)

Since

1.2.0

Category:
Others

pixel() 方法用来将 CSS 单位值('px')和数值互换。

Parameters

val
Type:
String|Number

(必须)val 参数指定用来转化的 CSS 单位或者数值。

Returns
Type:
String|Number

返回转化后的数值或者 CSS 单位值。

Usage

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 pixel 单个方法
import pixel from '@yaohaixiao/dom.js/pixel'

DOM.pixel('24px') // -> 24
pixel(24) // -> '24px'

redirect(url[, asLink = true])

Since

1.7.0

Category:
Others

redirect() 方法用来重定向 URL 地址。

Parameters

url
Type:
String
Default:
''

(必须)url 参数指定要跳转的 URL 地址。

asLink
Type:
Boolean
Default:
true

(可选)asLink 参数指定重定向的方式:true - 刷新页面跳转,false - 仅更新 URL 地址,不刷线页面。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 redirect 单个方法
import redirect from '@yaohaixiao/dom.js/redirect'

// 页面整体刷新,跳转到 http://www.yaohaixiao.com/ 站点
DOM.redirect('http://www.yaohaixiao.com/')

// 当前页面 http://www.yaohaixiao.com/,
// 仅更新 URL 路径到 http://www.yaohaixiao.com/?page=2
// 但不刷新页面
getURLProps('http://www.yaohaixiao.com/?page=2', true)

serialize(formElement[, isParams])

Category:
Others

serialize() 方法用来将 Form 表单中的数据序列化为 key/value 的对象数据或者 URL 地址中查询字符串的格式。

Parameters

formElement
Type:
HTMLElement

(必须)formElement 参数指定 Form 表单元素。

isParams
Type:
Boolean

(可选)isParams 指定是否序列化为查询字符串:

  • false:(默认值)序列化为 key/value 的对象数据;
  • true: 序列化为查询字符串;
Returns
Type:
Object|String

返回序列化后的数据。

<ul id="list" class="list"></ul>
<form name="form" id="form">
  <input type="text" id="user" name="user" class="user" value="Robert" />
  <input type="checkbox" id="reading" checked="checked" name="hobby" class="checkbox" value="reading" />读书
  <textarea id="desc" name="desc" class="desc">I\'m a programmer</textarea>
</form>'

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 serialize 单个方法
import serialize from '@yaohaixiao/dom.js/serialize'

const $list = DOM.byId('#list')
const $form = DOM.byId('#form')
const $user = DOM.byId('#user')

// serialize() 方法无法序列化非表单元素
DOM.serialize($list) // -> false
DOM.serialize($user) // -> false

// 序列化成查询字符串
serialize($form, true) // -> {desc: "I'm a programmer", hobby: "reading", user: "Robert"}

// 序列化为 key/value 的对象数据
serialize($form) // -> 'user=Robert&hobby=reading&desc=I%27m+a+programmer'

toURLSearchParams(o)

Category:
Others

toURLSearchParams() 方法用来将普通对象转化成 URL 地址中的查询字符串。

Parameters

o
Type:
Object

o 参数指定要转化的普通对象。

Returns
Type:
String

返回转化后的 URL 地址查询字符串。

// 引入 DOM 模块(中的所有工具方法)
import DOM from '@yaohaixiao/dom.js/dom
// 引用 toURLSearchParams 单个方法
import toURLSearchParams from '@yaohaixiao/dom.js/toURLSearchParams'

const queryOne = {name: 'Robert', age: 32}
const queryTwo = {price: 32, group: 4, color: 'red'}

DOM.toURLSearchParams(queryOne) // -> 'name=Robert&age=32'
toURLSearchParams(queryTwo) // -> 'price=32&group=4&color=red'