あの年直したDOMを覚えていますか?
6941 ワード
一般的なDOM操作の整理
⭐10.より多くの先端技術と知識点、サブスクリプション番号の検索
フレームワークが多く使われていますが、DOMを操作する純粋なJS文法を覚えていますか?この文章を読んで,往復してみよう.
操作className
addClass
要素にclassを追加し、classList属性を使用します.この属性はDOMTokenListオブジェクトを返します.オブジェクトにはaddメソッドがあり、classを追加できます.この属性がなければclassNameを使用して文字列の接続を行います.
hasClass
classが存在するかどうかを確認します
removeClass
要素のclassを削除
toggleClass
toggle状況に応じてclassを設定またはキャンセル
要素の属性と値
attr
getAttributeでhtml要素のプロパティを取得する
html要素の属性をsetAttributeで設定する
html要素の属性をremoveAttributeで削除
html
要素htmlコードを取得する;入力true outerHTMLの取得
outerHTMLまたはinnerHTMLで上書きする前の値
テキスト
要素contentTextを取得し、互換性innerTextを考慮
contentTextまたはinnerTextで値を割り当てて上書きする前の値
parse
HTML文字列を解析し、createContextualFragmentメソッドを使用してdocument-fragmentを作成します.
親子関係ノードの操作
parent
親要素の取得
closest
elから、内から外へ、最初の一致selectorの祖先要素(自身を含む)を取得し、matchesメソッドを使用して、互換性を処理する必要があります.
appendChild
エレメントの後に新しいエレメントを追加し、appendChildメソッドをそのまま使用すればよい
insertBefore
要素の前に新しい要素を挿入し、insertBeforeを直接使用すればいいです.parentNodeで呼び出すには、refElが参照ノードを表します.
children
要素の下にあるすべてのアノテーション以外のノードを取得
またはquerySeclectorAllを使用する
removeChildren
要素のすべてのサブ要素を削除
hasChild
エレメントの下にエレメントが含まれているかどうかを確認し、selectorセレクタ文字列またはnodeノードに転送します.
hasChildNodes
エレメントにサブエレメントがあるかどうかを確認
removeChild
要素によって指定されたサブ要素を削除
replaceChild
別のノードの代わりに1つのノードを使用
firstChild
エレメントの最初のサブノードの取得
lastChild
エレメントの最初のサブノードの取得
兄弟関係ノードの操作
elementSibling
次または前のnodeTypeをELEMENT_として取得NODEのノード、next/prevElementSibling互換性を使用するには、next/prevSiblingを再帰的に呼び出す必要があります
siblings
next/prevを含む自分以外のすべてのsiblingノードを取得
insertAdjacentHTML
要素の内部または外部にhtmlコードを追加する.insertAdjacentHTMLは、相対位置とhtml文字列の2つのパラメータを受信します. 'beforebegin': Before the element itself. 'afterbegin': Just inside the element, before its first child. 'beforeend': Just inside the element, after its last child. 'afterend': After the element itself.
ノードのフィルタリングとパス
cloneNode
nodeノードをクローンし、ifDeepがデプスクローンに転送されたかどうかを確認します.
forEach
css Selectorに基づいて要素リストを取得し、各要素に対してコールバック関数をトリガーします.
filter
selectorに基づいてフィルタコールバック関数の条件を満たす要素を取得する
matchSelector
要素がselectorで選択した要素であるかどうかを確認します.
私の購読番号に注目して、不定期にJSに関する技術文章を送って、技術だけを話してゴシップを話さないでください.
⭐10.より多くの先端技術と知識点、サブスクリプション番号の検索
JS
購読フレームワークが多く使われていますが、DOMを操作する純粋なJS文法を覚えていますか?この文章を読んで,往復してみよう.
操作className
addClass
要素にclassを追加し、classList属性を使用します.この属性はDOMTokenListオブジェクトを返します.オブジェクトにはaddメソッドがあり、classを追加できます.この属性がなければclassNameを使用して文字列の接続を行います.
function addClass(el, className) {
el.classList ? el.classList.add(className) : el.className += ` ${className}`
}
hasClass
classが存在するかどうかを確認します
function hasClass(el, className) {
return el.classList ? el.classList.contains(className) : el.className.split(' ').includes(className)
}
removeClass
要素のclassを削除
function removeClass(el, className) {
if (el.classList) {
el.classList.remove(className)
} else {
const classList = el.className.split(' ')
classList.splice(classList.indexOf(className), 1)
el.className = classList
}
}
toggleClass
toggle状況に応じてclassを設定またはキャンセル
function toggleClass(el, className) {
if (el.classList) {
el.classList.toggle(className)
} else {
const classList = el.className.split(' ')
if (classList.includes(className)) {
classList.splice(classList.indexOf(className), 1)
el.className = classList.join(' ')
} else {
el.className += ` ${className}`
}
}
}
要素の属性と値
attr
getAttributeでhtml要素のプロパティを取得する
el.getAttribute(attrName)
html要素の属性をsetAttributeで設定する
el.setAttribute(attrName, attrValue)
html要素の属性をremoveAttributeで削除
el.removeAttribute(attrName)
html
要素htmlコードを取得する;入力true outerHTMLの取得
function html(el, ifOuter = false) {
return ifOuter ? el.outerHTML : el.innerHTML
}
outerHTMLまたはinnerHTMLで上書きする前の値
outerHTML/innerHTML = newHTMLString
テキスト
要素contentTextを取得し、互換性innerTextを考慮
el.contentText || el.innerText
contentTextまたはinnerTextで値を割り当てて上書きする前の値
el.contentText/innerText = newVal
parse
HTML文字列を解析し、createContextualFragmentメソッドを使用してdocument-fragmentを作成します.
function parse(htmlString) {
const range = document.createRange()
const parse = range.createContextualFragment.bind(range)
return parse(htmlString)
}
親子関係ノードの操作
parent
親要素の取得
el.parentNode
closest
elから、内から外へ、最初の一致selectorの祖先要素(自身を含む)を取得し、matchesメソッドを使用して、互換性を処理する必要があります.
function closest(el, selector) {
const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector
if (matchesSelector.call(el, selector)) {
return el
} else {
el = el.parentElement
return closest(el, selector)
}
}
appendChild
エレメントの後に新しいエレメントを追加し、appendChildメソッドをそのまま使用すればよい
function appendChild(parentNode, newEl) {
parentNode.appendChild(newEl)
}
insertBefore
要素の前に新しい要素を挿入し、insertBeforeを直接使用すればいいです.parentNodeで呼び出すには、refElが参照ノードを表します.
function insertBefore(parentNode, newEl, refEl) {
parentNode.insertBefore(newEl, refEl)
}
children
要素の下にあるすべてのアノテーション以外のノードを取得
function children(el) {
return [...el.children].filter(item => item.nodeType != 8)
}
またはquerySeclectorAllを使用する
removeChildren
要素のすべてのサブ要素を削除
function remove(el) {
el.firstChild && el.removeChild(el.firstChild) && remove(el)
}
hasChild
エレメントの下にエレメントが含まれているかどうかを確認し、selectorセレクタ文字列またはnodeノードに転送します.
function hasChild(el, child) {
if (typeof child === 'string') {
return el.querySelector(child) !== null
} else {
return el !== child && el.contains(child)
}
}
hasChildNodes
エレメントにサブエレメントがあるかどうかを確認
parentNode.hasChildNodes
removeChild
要素によって指定されたサブ要素を削除
function removeChild(parentNode, childNode) {
return parentNode.removeChild(childNode)
}
replaceChild
別のノードの代わりに1つのノードを使用
function replaceChild(parentNode, newNode, oldNode) {
return parentNode.replaceChild(newNode, oldNode)
}
firstChild
エレメントの最初のサブノードの取得
parentNode.firstChild
lastChild
エレメントの最初のサブノードの取得
parentNode.lastChild
兄弟関係ノードの操作
elementSibling
次または前のnodeTypeをELEMENT_として取得NODEのノード、next/prevElementSibling互換性を使用するには、next/prevSiblingを再帰的に呼び出す必要があります
function elementSibling(el, prev = false) {
if (prev) {
if (el.previousElementSibling) return el.previousElementSibling
el = el.previousSibling
if (el && el.nodeType === 1) {
return el
} else {
return elementSibling(el, true)
}
} else {
if (el.nextElementSibling) return el.nextElementSibling
el = el.nextSibling
if (el && el.nodeType === 1) {
return el
} else {
return elementSibling(el)
}
}
}
siblings
next/prevを含む自分以外のすべてのsiblingノードを取得
function siblings(el) {
return [...el.parentNode.children].filter(item => item !== el)
}
insertAdjacentHTML
要素の内部または外部にhtmlコードを追加する.insertAdjacentHTMLは、相対位置とhtml文字列の2つのパラメータを受信します.
foo
function insertAdjacentHTML(el, pos, html) {
el.insertAdjacentHTML(pos, html)
}
ノードのフィルタリングとパス
cloneNode
nodeノードをクローンし、ifDeepがデプスクローンに転送されたかどうかを確認します.
function cloneNode(el, ifDeep = true) {
return el.cloneNode(ifDeep)
}
forEach
css Selectorに基づいて要素リストを取得し、各要素に対してコールバック関数をトリガーします.
function forEach(selector, cb) {
[...document.querySelectorAll(selector)].forEach(cb)
}
filter
selectorに基づいてフィルタコールバック関数の条件を満たす要素を取得する
function filter(selector, cb) {
return [...document.querySelectorAll(selector)].filter(cb)
}
matchSelector
要素がselectorで選択した要素であるかどうかを確認します.
function matchSelector(el, selector) {
if (el.matches) {
return el.matches(selector)
} else {
return [...el.parentNode.querySelectorAll(selector)].some(item => item === el)
}
}
私の購読番号に注目して、不定期にJSに関する技術文章を送って、技術だけを話してゴシップを話さないでください.