让æä»¬æ´æ·±å ¥å°äºè§£ä¸ä¸ DOM èç¹ã
卿¬ç« ä¸ï¼æä»¬å°æ´æ·±å ¥å°äºè§£å®ä»¬æ¯ä»ä¹ï¼å¹¶å¦ä¹ å®ä»¬æå¸¸ç¨ç屿§ã
DOM èç¹ç±»
ä¸åç DOM èç¹å¯è½æä¸åç屿§ãä¾å¦ï¼æ ç¾ <a> ç¸å¯¹åºçå
ç´ èç¹å
·æé¾æ¥ç¸å
³çï¼link-relatedï¼å±æ§ï¼æ ç¾ <input> ç¸å¯¹åºçå
ç´ èç¹å
·æä¸è¾å
¥ç¸å
³ç屿§ï¼çãææ¬èç¹ä¸å
ç´ èç¹ä¸åã使¯ææè¿äºæ ç¾å¯¹åºç DOM èç¹ä¹é´ä¹åå¨å
±æç屿§åæ¹æ³ï¼å 为ææç±»åç DOM èç¹é½å½¢æäºä¸ä¸ªåä¸å±æ¬¡çç»æï¼single hierarchyï¼ã
æ¯ä¸ª DOM èç¹é½å±äºç¸åºçå 建类ã
屿¬¡ç»æï¼hierarchyï¼çæ ¹èç¹æ¯ EventTargetï¼Node ç»§æ¿èªå®ï¼å ¶ä» DOM èç¹ç»§æ¿èª Nodeã
ä¸å¾åäºè¿ä¸æ¥è¯´æï¼
ç±»å¦ä¸æç¤ºï¼
-
EventTarget ââ æ¯ä¸åçæ ¹âæ½è±¡ï¼abstractï¼âç±»ã
该类çå¯¹è±¡ä»æªè¢«å建ãå®ä½ä¸ºä¸ä¸ªåºç¡ï¼ä»¥ä¾¿è®©ææ DOM èç¹é½æ¯ææè°çâäºä»¶ï¼eventï¼âï¼æä»¬ä¼å¨ä¹åå¦ä¹ å®ã
-
Node ââ 乿¯ä¸ä¸ªâæ½è±¡âç±»ï¼å å½ DOM èç¹çåºç¡ã
宿ä¾äºæ çæ ¸å¿åè½ï¼
parentNodeï¼nextSiblingï¼childNodesçï¼å®ä»¬é½æ¯ getterï¼ãNodeç±»çå¯¹è±¡ä»æªè¢«å建ã使¯è¿æä¸äºç»§æ¿èªå®çå ¶ä»ç±»ï¼å æ¤ç»§æ¿äºNodeçåè½ï¼ã -
Document ç±äºåå²åå é常被
HTMLDocumentç»§æ¿ï¼å°½ç®¡ææ°çè§è没æè§å®ï¼ââ æ¯ä¸ä¸ªæ´ä½çææ¡£ãå ¨å±åé
documentå°±æ¯å±äºè¿ä¸ªç±»ãå®ä½ä¸º DOM çå ¥å£ã -
CharacterData ââ ä¸ä¸ªâæ½è±¡âç±»ï¼è¢«ä¸è¿°ç±»ç»§æ¿ï¼
-
Element ââ æ¯ DOM å ç´ çåºç¡ç±»ã
宿ä¾äºå ç´ çº§å¯¼èªï¼navigationï¼ï¼å¦
nextElementSiblingï¼childrenï¼ä»¥åæç´¢æ¹æ³ï¼å¦getElementsByTagNameåquerySelectorãæµè§å¨ä¸ä» æ¯æ HTMLï¼è¿æ¯æ XML å SVGãå æ¤ï¼
Elementç±»å å½çæ¯æ´å ·ä½çç±»çåºç¡ï¼SVGElementï¼XMLElementï¼æä»¬å¨è¿éä¸éè¦å®ï¼åHTMLElementã -
æåï¼HTMLElement ââ æ¯ææ HTML å ç´ çåºç¡ç±»ãæä»¬å¤§é¨åæ¶åé½ä¼ç¨å°å®ã
å®ä¼è¢«æ´å ·ä½ç HTML å ç´ ç»§æ¿ï¼
- HTMLInputElement ââ
<input>å ç´ çç±»ï¼ - HTMLBodyElement ââ
<body>å ç´ çç±»ï¼ - HTMLAnchorElement ââ
<a>å ç´ çç±»ï¼ - â¦â¦çã
- HTMLInputElement ââ
è¿æå¾å¤å
¶ä»æ ç¾å
·æèªå·±çç±»ï¼å¯è½è¿å
·æç¹å®ç屿§åæ¹æ³ï¼èä¸äºå
ç´ ï¼å¦ <span>ã<section>ã<article> çï¼æ²¡æä»»ä½ç¹å®ç屿§ï¼æä»¥å®ä»¬æ¯ HTMLElement ç±»çå®ä¾ã
å æ¤ï¼ç»å®èç¹çå ¨é¨å±æ§åæ¹æ³é½æ¯ç»§æ¿é¾çç»æã
ä¾å¦ï¼æä»¬èèä¸ä¸ <input> å
ç´ ç DOM 对象ãå®å±äº HTMLInputElement ç±»ã
å®è·å屿§åæ¹æ³ï¼å¹¶å°å ¶ä½ä¸ºä¸åç±»ï¼æç»§æ¿é¡ºåºååºï¼çå å ï¼
HTMLInputElementââ 该类æä¾ç¹å®äºè¾å ¥ç屿§ï¼HTMLElementââ 宿ä¾äºéç¨ï¼commonï¼ç HTML å ç´ æ¹æ³ï¼ä»¥å getter å setterï¼Elementââ æä¾éç¨ï¼genericï¼å ç´ æ¹æ³ï¼Nodeââ æä¾éç¨ DOM èç¹å±æ§ï¼EventTargetââ 为äºä»¶ï¼å æ¬äºä»¶æ¬èº«ï¼æä¾æ¯æï¼- â¦â¦æåï¼å®ç»§æ¿èª
Objectï¼å 为åhasOwnPropertyè¿æ ·çâæ®éå¯¹è±¡âæ¹æ³ä¹æ¯å¯ç¨çã
æä»¬å¯ä»¥éè¿åè°æ¥æ¥ç DOM èç¹ç±»åï¼å 为对象é常é½å
·æ constructor 屿§ãå®å¼ç¨ç±»ç constructorï¼constructor.name å°±æ¯å®çåç§°ï¼
alert( document.body.constructor.name ); // HTMLBodyElement
â¦â¦æè
æä»¬å¯ä»¥å¯¹å
¶ä½¿ç¨ toString æ¹æ³ï¼
alert( document.body ); // [object HTMLBodyElement]
æä»¬è¿å¯ä»¥ä½¿ç¨ instanceof æ¥æ£æ¥ç»§æ¿ï¼
alert( document.body instanceof HTMLBodyElement ); // true
alert( document.body instanceof HTMLElement ); // true
alert( document.body instanceof Element ); // true
alert( document.body instanceof Node ); // true
alert( document.body instanceof EventTarget ); // true
æ£å¦æä»¬æçå°çï¼DOM èç¹æ¯å¸¸è§ç JavaScript 对象ãå®ä»¬ä½¿ç¨åºäºååçç±»è¿è¡ç»§æ¿ã
卿µè§å¨ä¸ï¼ä½¿ç¨ console.dir(elem) è¾åºå
ç´ æ¥æ¥ç乿¯é常容æçã卿§å¶å°ä¸ï¼ä½ å¯ä»¥çå° HTMLElement.prototype å Element.prototype çã
console.dir(elem) ä¸ console.log(elem)大夿°æµè§å¨å¨å
¶å¼åè
å·¥å
·ä¸é½æ¯æè¿ä¸¤ä¸ªå½ä»¤ï¼console.log å console.dirãå®ä»¬å°å®ä»¬çåæ°è¾åºå°æ§å¶å°ä¸ãå¯¹äº JavaScript 对象ï¼è¿äºå½ä»¤é常åçæ¯ç¸åçäºã
ä½å¯¹äº DOM å ç´ ï¼å®ä»¬æ¯ä¸åçï¼
console.log(elem)æ¾ç¤ºå ç´ ç DOM æ ãconsole.dir(elem)å°å ç´ æ¾ç¤ºä¸º DOM 对象ï¼é常éåæ¢ç´¢å ¶å±æ§ã
ä½ å¯ä»¥å¨ document.body ä¸å°è¯ä¸ä¸ã
å¨è§èä¸ï¼DOM ç±»ä¸æ¯ä½¿ç¨ JavaScript æ¥æè¿°çï¼èæ¯ä¸ç§ç¹æ®ç æ¥å£æè¿°è¯è¨ï¼Interface description languageï¼ï¼ç®å为 IDLï¼å®é常å¾å®¹æçè§£ã
å¨ IDL ä¸ï¼ææå±æ§ä»¥å
¶ç±»åå¼å¤´ãä¾å¦ï¼DOMString å boolean çã
以䏿¯æå½ï¼excerptï¼ï¼å¹¶éææ³¨éï¼
// å®ä¹ HTMLInputElement
// åå· ":" 表示 HTMLInputElement ç»§æ¿èª HTMLElement
interface HTMLInputElement: HTMLElement {
// æ¥ä¸æ¥æ¯ <input> å
ç´ ç屿§åæ¹æ³
// "DOMString" è¡¨ç¤ºå±æ§ç弿¯å符串
attribute DOMString accept;
attribute DOMString alt;
attribute DOMString autocomplete;
attribute DOMString value;
// å¸å°å¼å±æ§ï¼true/falseï¼
attribute boolean autofocus;
...
// ç°å¨æ¹æ³ï¼"void" è¡¨ç¤ºæ¹æ³æ²¡æè¿åå¼
void select();
...
}
ânodeTypeâ 屿§
nodeType 屿§æä¾äºå¦ä¸ç§âè¿æ¶çâç¨æ¥è·å DOM èç¹ç±»åçæ¹æ³ã
宿ä¸ä¸ªæ°å¼åå¼ï¼numeric valueï¼ï¼
- 对äºå
ç´ èç¹
elem.nodeType == 1ï¼ - å¯¹äºææ¬èç¹
elem.nodeType == 3ï¼ - å¯¹äº document 对象
elem.nodeType == 9ï¼ - å¨ è§è ä¸è¿æä¸äºå ¶ä»å¼ã
ä¾å¦ï¼
<body>
<script>
let elem = document.body;
// 让æä»¬æ£æ¥ä¸ä¸ï¼elem ä¸çèç¹ç±»åæ¯ä»ä¹ï¼
alert(elem.nodeType); // 1 => element
// å®ç第ä¸ä¸ªåèç¹çç±»åæ¯â¦â¦
alert(elem.firstChild.nodeType); // 3 => text
// å¯¹äº document 对象ï¼ç±»åæ¯ 9
alert( document.nodeType ); // 9
</script>
</body>
å¨ç°ä»£èæ¬ä¸ï¼æä»¬å¯ä»¥ä½¿ç¨ instanceof åå
¶ä»åºäºç±»çæ£æ¥æ¹æ³æ¥æ¥çèç¹ç±»åï¼ä½ææ¶ nodeType å¯è½æ´ç®åãæä»¬åªè½è¯»å nodeType èä¸è½ä¿®æ¹å®ã
æ ç¾ï¼nodeName å tagName
ç»å®ä¸ä¸ª DOM èç¹ï¼æä»¬å¯ä»¥ä» nodeName æè
tagName 屿§ä¸è¯»åå®çæ ç¾åï¼
ä¾å¦ï¼
alert( document.body.nodeName ); // BODY
alert( document.body.tagName ); // BODY
tagName å nodeName ä¹é´æä»ä¹ä¸ååï¼
å½ç¶ï¼å·®å¼å°±ä½ç°å¨å®ä»¬çååä¸ï¼ä½ç¡®å®æäºå¾®å¦ã
tagName屿§ä» éç¨äºElementèç¹ãnodeNameæ¯ä¸ºä»»æNodeå®ä¹çï¼- 对äºå
ç´ ï¼å®çæä¹ä¸
tagNameç¸åã - 对äºå ¶ä»èç¹ç±»åï¼textï¼comment çï¼ï¼å®æ¥æä¸ä¸ªå¯¹åºèç¹ç±»åçå符串ã
- 对äºå
ç´ ï¼å®çæä¹ä¸
æ¢å¥è¯è¯´ï¼tagName ä»
åå
ç´ èç¹æ¯æï¼å 为å®èµ·æºäº Element ç±»ï¼ï¼è nodeName åå¯ä»¥è¯´æå
¶ä»èç¹ç±»åã
ä¾å¦ï¼æä»¬æ¯è¾ä¸ä¸ document ç tagName å nodeNameï¼ä»¥åä¸ä¸ªæ³¨éèç¹ï¼
<body><!-- comment -->
<script>
// for comment
alert( document.body.firstChild.tagName ); // undefinedï¼ä¸æ¯ä¸ä¸ªå
ç´ ï¼
alert( document.body.firstChild.nodeName ); // #comment
// for document
alert( document.tagName ); // undefinedï¼ä¸æ¯ä¸ä¸ªå
ç´ ï¼
alert( document.nodeName ); // #document
</script>
</body>
妿æä»¬åªå¤çå
ç´ ï¼é£ä¹ tagName å nodeName è¿ä¸¤ç§æ¹æ³ï¼æä»¬é½å¯ä»¥ä½¿ç¨ï¼æ²¡æåºå«ã
æµè§å¨æä¸¤ç§å¤çææ¡£ï¼documentï¼ç模å¼ï¼HTML å XMLãé常ï¼HTML 模å¼ç¨äºç½é¡µãåªæå¨æµè§å¨æ¥æ¶å°å¸¦æ Content-Type: application/xml+xhtml header ç XML-document æ¶ï¼XML æ¨¡å¼æä¼è¢«å¯ç¨ã
å¨ HTML 模å¼ä¸ï¼tagName/nodeName å§ç»æ¯å¤§åçï¼å®æ¯ BODYï¼è䏿¯ <body> æ <BoDy>ã
å¨ XML 模å¼ä¸ï¼å¤§å°åä¿æä¸ºâåæ ·âãå¦ä»ï¼XML 模å¼å¾å°è¢«ä½¿ç¨ã
innerHTMLï¼å 容
innerHTML 屿§å 许å°å ç´ ä¸ç HTML è·å为å符串形å¼ã
æä»¬ä¹å¯ä»¥ä¿®æ¹å®ãå æ¤ï¼å®æ¯æ´æ¹é¡µé¢æææçæ¹æ³ä¹ä¸ã
ä¸é¢è¿ä¸ªç¤ºä¾æ¾ç¤ºäº document.body ä¸çå
容ï¼ç¶åå°å
¶å®å
¨æ¿æ¢ï¼
<body>
<p>A paragraph</p>
<div>A div</div>
<script>
alert( document.body.innerHTML ); // 读åå½åå
容
document.body.innerHTML = 'The new BODY!'; // æ¿æ¢å®
</script>
</body>
æä»¬å¯ä»¥å°è¯æå ¥æ æç HTMLï¼æµè§å¨ä¼ä¿®å¤æä»¬çé误ï¼
<body>
<script>
document.body.innerHTML = '<b>test'; // å¿è®°éåæ ç¾
alert( document.body.innerHTML ); // <b>test</b>ï¼è¢«ä¿®å¤äºï¼
</script>
</body>
妿 innerHTML å°ä¸ä¸ª <script> æ ç¾æå
¥å° document ä¸ ââ å®ä¼æä¸º HTML çä¸é¨åï¼ä½æ¯ä¸ä¼æ§è¡ã
å°å¿ï¼âinnerHTML+=â ä¼è¿è¡å®å ¨éå
æä»¬å¯ä»¥ä½¿ç¨ elem.innerHTML+="more html" å° HTML éå å°å
ç´ ä¸ã
å°±åè¿æ ·ï¼
chatDiv.innerHTML += "<div>Hello<img src='smile.gif'/> !</div>";
chatDiv.innerHTML += "How goes?";
ä½æä»¬å¿ é¡»é常谨æ å°ä½¿ç¨å®ï¼å 为æä»¬æåç 䏿¯ éå å 容ï¼èä¸å®å ¨å°éåã
仿æ¯ä¸æ¥è¯´ï¼ä¸é¢è¿ä¸¤è¡ä»£ç çä½ç¨ç¸åï¼
elem.innerHTML += "...";
// è¿è¡åå
¥çä¸ç§æ´ç®ççæ¹å¼ï¼
elem.innerHTML = elem.innerHTML + "..."
æ¢å¥è¯è¯´ï¼innerHTML+= åäºä»¥ä¸å·¥ä½ï¼
- ç§»é¤æ§çå 容ã
- ç¶ååå
¥æ°ç
innerHTMLï¼æ°æ§ç»åï¼ã
å 为å 容已âå½é¶âå¹¶ä»å¤´å¼å§éåï¼å æ¤ææçå¾çåå ¶ä»èµæºé½å°éåå è½½ã
å¨ä¸é¢ç chatDiv 示ä¾ä¸ï¼chatDiv.innerHTML+="How goes?" éå»ºäº HTML å
容并鿰å è½½äº smile.gifï¼å¸æå®æ¯ç¼åçï¼ã妿 chatDiv æè®¸å¤å
¶ä»ææ¬åå¾çï¼é£ä¹å°±å¾å®¹æçå°éæ°å è½½ï¼è¯æ³¨ï¼æ¯æå¨æå¾å¤å
容æ¶ï¼éæ°å è½½ä¼èè´¹æ´å¤çæ¶é´ï¼æä»¥ä½ å°±å¾å®¹æçè§é¡µé¢éè½½çè¿ç¨ï¼ã
å¹¶ä¸è¿ä¼æå
¶ä»å¯ä½ç¨ãä¾å¦ï¼å¦æç°æçææ¬è¢«ç¨é¼ æ éä¸äºï¼é£ä¹å¤§å¤æ°æµè§å¨é½ä¼å¨éå innerHTML æ¶å é¤éå®ç¶æã妿è¿éæä¸ä¸ªå¸¦æç¨æ·è¾å
¥çææ¬ç <input>ï¼é£ä¹è¿ä¸ªè¢«è¾å
¥çææ¬å°ä¼è¢«ç§»é¤ãè¯¸å¦æ¤ç±»ã
幸è¿çæ¯ï¼é¤äº innerHTMLï¼è¿æå
¶ä»å¯ä»¥æ·»å HTML çæ¹æ³ï¼æä»¬å¾å¿«å°±ä¼å¦å°ã
outerHTMLï¼å ç´ ç宿´ HTML
outerHTML 屿§å
å«äºå
ç´ ç宿´ HTMLãå°±å innerHTML å ä¸å
ç´ æ¬èº«ä¸æ ·ã
ä¸é¢æ¯ä¸ä¸ªç¤ºä¾ï¼
<div id="elem">Hello <b>World</b></div>
<script>
alert(elem.outerHTML); // <div id="elem">Hello <b>World</b></div>
</script>
注æï¼ä¸ innerHTML ä¸åï¼åå
¥ outerHTML ä¸ä¼æ¹åå
ç´ ãèæ¯å¨ DOM 䏿¿æ¢å®ã
æ¯çï¼å¬èµ·æ¥å¾å¥æªï¼å®ç¡®å®å¾å¥æªï¼è¿å°±æ¯ä¸ºä»ä¹æä»¬å¨è¿é对æ¤åäºä¸ä¸ªåç¬ç注éãçä¸ä¸ã
èèä¸é¢è¿ä¸ªç¤ºä¾ï¼
<div>Hello, world!</div>
<script>
let div = document.querySelector('div');
// ä½¿ç¨ <p>...</p> æ¿æ¢ div.outerHTML
div.outerHTML = '<p>A new element</p>'; // (*)
// è¤ï¼'div' è¿æ¯åæ¥é£æ ·ï¼
alert(div.outerHTML); // <div>Hello, world!</div> (**)
</script>
çèµ·æ¥ççå¾å¥æªï¼å¯¹å§ï¼
å¨ (*) è¡ï¼æä»¬ä½¿ç¨ <p>A new element</p> æ¿æ¢ divãå¨å¤é¨ææ¡£ï¼DOMï¼ä¸æä»¬å¯ä»¥çå°çæ¯æ°å
容è䏿¯ <div>ã使¯æ£å¦æä»¬å¨ (**) è¡æçå°çï¼æ§ç div åé并没æè¢«æ¹åã
outerHTML èµå¼ä¸ä¼ä¿®æ¹ DOM å
ç´ ï¼å¨è¿ä¸ªä¾å䏿¯è¢« âdivâ å¼ç¨ç对象ï¼ï¼èæ¯å°å
¶ä» DOM ä¸å é¤å¹¶å¨å
¶ä½ç½®æå
¥æ°ç HTMLã
æä»¥ï¼å¨ div.outerHTML=... ä¸åççäºæ
æ¯ï¼
divè¢«ä»ææ¡£ï¼documentï¼ä¸ç§»é¤ã- å¦ä¸ä¸ª HTML çæ®µ
<p>A new element</p>被æå ¥å°å ¶ä½ç½®ä¸ã div仿¥æå ¶æ§çå¼ãæ°ç HTML 没æè¢«èµå¼ç»ä»»ä½åéã
å¨è¿å¿å¾å®¹æåºéï¼ä¿®æ¹ div.outerHTML ç¶åç»§ç»ä½¿ç¨ divï¼å°±å¥½åå®å
å«çæ¯æ°å
容䏿 ·ãä½äºå®å¹¶é妿¤ãè¿æ ·çä¸è¥¿å¯¹äº innerHTML æ¯æ£ç¡®çï¼ä½æ¯å¯¹äº outerHTML å´ä¸æ£ç¡®ã
æä»¬å¯ä»¥å elem.outerHTML åå
¥å
容ï¼ä½æ¯è¦è®°ä½ï¼å®ä¸ä¼æ¹åæä»¬æåçå
ç´ ï¼âelemâï¼ãèæ¯å°æ°ç HTML æ¾å¨å
¶ä½ç½®ä¸ãæä»¬å¯ä»¥éè¿æ¥è¯¢ DOM æ¥è·å对æ°å
ç´ çå¼ç¨ã
nodeValue/dataï¼ææ¬èç¹å 容
innerHTML 屿§ä»
对å
ç´ èç¹ææã
å
¶ä»èç¹ç±»åï¼ä¾å¦ææ¬èç¹ï¼å
·æå®ä»¬ç对åºé¡¹ï¼nodeValue å data 屿§ãè¿ä¸¤è
å¨å®é
使ç¨ä¸å ä¹ç¸åï¼åªæç»å¾®è§èä¸çå·®å¼ãå æ¤ï¼æä»¬å°ä½¿ç¨ dataï¼å ä¸ºå®æ´çã
è¯»åææ¬èç¹å注éèç¹çå 容ç示ä¾ï¼
<body>
Hello
<!-- Comment -->
<script>
let text = document.body.firstChild;
alert(text.data); // Hello
let comment = text.nextSibling;
alert(comment.data); // Comment
</script>
</body>
å¯¹äºææ¬èç¹ï¼æä»¬å¯ä»¥æ³è±¡è¯»åæä¿®æ¹å®ä»¬çåå ï¼ä½æ¯æ³¨éå¢ï¼
ææ¶ï¼å¼åè ä¼å°ä¿¡æ¯ææ¨¡æ¿è¯´æåµå ¥å° HTML ä¸ç注éä¸ï¼å¦ä¸æç¤ºï¼
<!-- if isAdmin -->
<div>Welcome, Admin!</div>
<!-- /if -->
â¦â¦ç¶åï¼JavaScript å¯ä»¥ä» data 屿§ä¸è¯»åå®ï¼å¹¶å¤çåµå
¥çæä»¤ã
textContentï¼çº¯ææ¬
textContent æä¾äºå¯¹å
ç´ å
ç ææ¬ çè®¿é®æéï¼ä»
ææ¬ï¼å»æææ <tags>ã
ä¾å¦ï¼
<div id="news">
<h1>Headline!</h1>
<p>Martians attack people!</p>
</div>
<script>
// Headline! Martians attack people!
alert(news.textContent);
</script>
æ£å¦æä»¬æçå°ï¼åªè¿åææ¬ï¼å°±åææ <tags> é½è¢«åªæäºä¸æ ·ï¼ä½å®é
ä¸å
¶ä¸çææ¬ä»ç¶åå¨ã
å¨å®é å¼åä¸ï¼ç¨å°è¿æ ·çææ¬è¯»åçåºæ¯é常å°ã
åå
¥ textContent è¦æç¨å¾å¤ï¼å 为å®å
许以âå®å
¨æ¹å¼âåå
¥ææ¬ã
å设æä»¬æä¸ä¸ªç¨æ·è¾å ¥çä»»æåç¬¦ä¸²ï¼æä»¬å¸æå°å ¶æ¾ç¤ºåºæ¥ã
- 使ç¨
innerHTMLï¼æä»¬å°å ¶âä½ä¸º HTMLâæå ¥ï¼å¸¦æææ HTML æ ç¾ã - 使ç¨
textContentï¼æä»¬å°å ¶âä½ä¸ºææ¬âæå ¥ï¼ææç¬¦å·ï¼symbolï¼åæå颿ä¹å¤çã
æ¯è¾ä¸¤è ï¼
<div id="elem1"></div>
<div id="elem2"></div>
<script>
let name = prompt("What's your name?", "<b>Winnie-the-Pooh!</b>");
elem1.innerHTML = name;
elem2.textContent = name;
</script>
- 第ä¸ä¸ª
<div>è·å name âä½ä¸º HTMLâï¼æææ ç¾é½åææ ç¾ï¼æä»¥æä»¬å¯ä»¥çå°ç²ä½ç nameã - 第äºä¸ª
<div>è·å name âä½ä¸ºææ¬âï¼å æ¤æä»¬å¯ä»¥ä»åé¢ä¸çå°<b>Winnie-the-Pooh!</b>ã
å¨å¤§å¤æ°æ
åµä¸ï¼æä»¬æææ¥èªç¨æ·çææ¬ï¼å¹¶å¸æå°å
¶è§ä¸ºææ¬å¯¹å¾
ãæä»¬ä¸å¸æå¨æä»¬çç½ç«ä¸åºç°ææä¸å°ç HTMLã对 textContent çèµå¼æ£å¥½å¯ä»¥åå°è¿ä¸ç¹ã
âhiddenâ 屿§
âhiddenâ ç¹æ§ï¼attributeï¼å DOM 屿§ï¼propertyï¼æå®å ç´ æ¯å¦å¯è§ã
æä»¬å¯ä»¥å¨ HTML ä¸ä½¿ç¨å®ï¼æè ä½¿ç¨ JavaScript å¯¹å ¶è¿è¡èµå¼ï¼å¦ä¸æç¤ºï¼
<div>Both divs below are hidden</div>
<div hidden>With the attribute "hidden"</div>
<div id="elem">JavaScript assigned the property "hidden"</div>
<script>
elem.hidden = true;
</script>
仿æ¯ä¸æ¥è¯´ï¼hidden ä¸ style="display:none" åçæ¯ç¸åçäºãä½ hidden åæ³æ´ç®æ´ã
è¿éæä¸ä¸ª blinking å ç´ ï¼
<div id="elem">A blinking element</div>
<script>
setInterval(() => elem.hidden = !elem.hidden, 1000);
</script>
æ´å¤å±æ§
DOM å ç´ è¿æå ¶ä»å±æ§ï¼ç¹å«æ¯é£äºä¾èµäº class ç屿§ï¼
valueââ<input>ï¼<select>å<textarea>ï¼HTMLInputElementï¼HTMLSelectElementâ¦â¦ï¼ç valueãhrefââ<a href="...">ï¼HTMLAnchorElementï¼ç hrefãidââ ææå ç´ ï¼HTMLElementï¼ç âidâ ç¹æ§ï¼attributeï¼çå¼ã- â¦â¦ä»¥åæ´å¤å ¶ä»å 容â¦â¦
ä¾å¦ï¼
<input type="text" id="elem" value="value">
<script>
alert(elem.type); // "text"
alert(elem.id); // "elem"
alert(elem.value); // value
</script>
大夿°æ å HTML ç¹æ§ï¼attributeï¼é½å ·æç¸åºç DOM 屿§ï¼æä»¬å¯ä»¥åè¿æ ·è®¿é®å®ã
妿æä»¬æ³ç¥éç»å®ç±»ç忝æå±æ§ç宿´åè¡¨ï¼æä»¬å¯ä»¥å¨è§è䏿¾å°å®ä»¬ãä¾å¦ï¼å¨ https://html.spec.whatwg.org/#htmlinputelement ä¸è®°å½äº HTMLInputElementã
æè
ï¼å¦ææä»¬æ³è¦å¿«éè·åå®ä»¬ï¼æè
对å
·ä½çæµè§å¨è§èæå
´è¶£ â æä»¬æ»æ¯å¯ä»¥ä½¿ç¨ console.dir(elem) è¾åºå
ç´ å¹¶è¯»åå
¶å±æ§ãæè
卿µè§å¨çå¼åè
å·¥å
·çå
ç´ ï¼Elementsï¼æ ç¾é¡µä¸æ¢ç´¢âDOM 屿§âã
æ»ç»
æ¯ä¸ª DOM èç¹é½å±äºä¸ä¸ªç¹å®çç±»ãè¿äºç±»å½¢æå±æ¬¡ç»æï¼hierarchyï¼ã宿´ç屿§åæ¹æ³éæ¯ç»§æ¿çç»æã
主è¦ç DOM èç¹å±æ§æï¼
nodeType- æä»¬å¯ä»¥ä½¿ç¨å®æ¥æ¥çèç¹æ¯ææ¬èç¹è¿æ¯å
ç´ èç¹ãå®å
·æä¸ä¸ªæ°å¼åå¼ï¼numeric valueï¼ï¼
1表示å ç´ ï¼3è¡¨ç¤ºææ¬èç¹ï¼å ¶ä»ä¸äºåä»£è¡¨å ¶ä»èç¹ç±»åãåªè¯»ã nodeName/tagName- ç¨äºå
ç´ åï¼æ ç¾åï¼é¤äº XML 模å¼ï¼é½è¦å¤§åï¼ã对äºéå
ç´ èç¹ï¼
nodeNameæè¿°äºå®æ¯ä»ä¹ãåªè¯»ã innerHTML- å ç´ ç HTML å 容ãå¯ä»¥è¢«ä¿®æ¹ã
outerHTML- å
ç´ ç宿´ HTMLã对
elem.outerHTMLçåå ¥æä½ä¸ä¼è§¦åelemæ¬èº«ãèæ¯å¨å¤é¨ä¸ä¸æä¸å°å ¶æ¿æ¢ä¸ºæ°ç HTMLã nodeValue/data- éå
ç´ èç¹ï¼ææ¬ã注éï¼çå
容ã两è
å ä¹ä¸æ ·ï¼æä»¬é常使ç¨
dataãå¯ä»¥è¢«ä¿®æ¹ã textContent- å
ç´ å
çææ¬ï¼HTML å廿æ
<tags>ãåå ¥ææ¬ä¼å°ææ¬æ¾å ¥å ç´ å ï¼ææç¹æ®åç¬¦åæ ç¾å被è§ä¸ºææ¬ãå¯ä»¥å®å ¨å°æå ¥ç¨æ·çæçææ¬ï¼å¹¶é²æ¢ä¸å¿ è¦ç HTML æå ¥ã hidden- å½è¢«è®¾ç½®ä¸º
trueæ¶ï¼æ§è¡ä¸ CSSdisplay:noneç¸åçäºã
DOM èç¹è¿å
·æå
¶ä»å±æ§ï¼å
·ä½æåªäºå±æ§ååå³äºå®ä»¬çç±»ãä¾å¦ï¼<input> å
ç´ ï¼HTMLInputElementï¼æ¯æ valueï¼typeï¼è <a> å
ç´ ï¼HTMLAnchorElementï¼åæ¯æ href çã大夿°æ å HTML ç¹æ§ï¼attributeï¼é½å
·æç¸åºç DOM 屿§ã
ç¶èï¼ä½æ¯ HTML ç¹æ§ï¼attributeï¼å DOM 屿§ï¼propertyï¼å¹¶ä¸æ»æ¯ç¸åçï¼æä»¬å°å¨ä¸ä¸ç« ä¸çå°ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼