


Grundlegendes Tutorial zum Betrieb von HTML-DOM-Knoten mit JavaScript_Grundkenntnissen
Aufgrund der Existenz von DOM können wir Knoten über JavaScript abrufen, erstellen, ändern oder löschen.
HINWEIS: Bei den Elementen in den unten aufgeführten Beispielen handelt es sich ausschließlich um Elementknoten.
Knoten abrufen
Vater-Sohn-Beziehung
element.parentNode element.firstChild/element.lastChild element.childNodes/element.children
Brüderliche Beziehung
element.previousSibling/element.nextSibling element.previousElementSibling/element.nextElementSibling
Der Erwerb von Knoten über die direkte Beziehung zwischen Knoten verringert die Wartbarkeit des Codes erheblich (Änderungen in der Beziehung zwischen Knoten wirken sich direkt auf den Erwerb von Knoten aus), aber dieses Problem kann durch Schnittstellen effektiv gelöst werden.
Der Erwerb von Knoten über die direkte Beziehung zwischen Knoten verringert die Wartbarkeit des Codes erheblich (Änderungen in der Beziehung zwischen Knoten wirken sich direkt auf den Erwerb von Knoten aus), aber dieses Problem kann durch Schnittstellen effektiv gelöst werden.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ELEMENT_NODE & TEXT_NODE</title> </head> <body> <ul id="ul"> <li>First</li> <li>Second</li> <li>Third</li> <li>Fourth</li> </ul> <p>Hello</p> <script type="text/javascript"> var ulNode = document.getElementsByTagName("ul")[0]; console.log(ulNode.parentNode); //<body></body> console.log(ulNode.previousElementSibling); //null console.log(ulNode.nextElementSibling); //<p>Hello</p> console.log(ulNode.firstElementChild); //<li>First</li> console.log(ulNode.lastElementChild); //<li>Fourth</li> </script> </body> </html>
NTOE: Aufmerksame Leute werden feststellen, dass es im Beispiel der Knotendurchquerung keine Leerzeichen zwischen den Knoten body, ul, li und p gibt, denn wenn Leerzeichen vorhanden sind, werden die Leerzeichen als TEXT-Knoten betrachtet. Verwenden Sie also ulNode. previousSibling, um einen leeren Textknoten anstelle des
Implementieren Sie eine browserkompatible Version von element.children
Einige ältere Browser unterstützen die Methode element.children nicht, wir können jedoch die folgende Methode verwenden, um Kompatibilität zu erreichen.
<html lang> <head> <meta charest="utf-8"> <title>Compatible Children Method</title> </head> <body id="body"> <div id="item"> <div>123</div> <p>ppp</p> <h1 id="h">h1</h1> </div> <script type="text/javascript"> function getElementChildren(e){ if(e.children){ return e.children; }else{ /* compatible other browse */ var i, len, children = []; var child = element.firstChild; if(child != element.lastChild){ while(child != null){ if(child.nodeType == 1){ children.push(child); } child = child.nextSibling; } }else{ children.push(child); } return children; } } /* Test method getElementChildren(e) */ var item = document.getElementById("item"); var children = getElementChildren(item); for(var i =0; i < children.length; i++){ alert(children[i]); } </script> </body> </html>
HINWEIS: Diese Kompatibilitätsmethode ist ein vorläufiger Entwurf und wurde nicht auf Kompatibilität getestet.
Schnittstelle zum Abrufen des Elementknotens
getElementById getElementsByTagName getElementsByClassName querySelector querySelectorAll
getElementById
Rufen Sie das Knotenobjekt mit der angegebenen ID im Dokument ab.
var element = document.getElementById('id'); getElementsByTagName
Erhalten Sie dynamisch eine Sammlung von Elementknoten mit angegebenen Tags (der Rückgabewert wird von DOM-Änderungen beeinflusst und sein Wert ändert sich). Diese Schnittstelle kann direkt über das Element abgerufen werden und muss nicht direkt auf das Dokument einwirken.
// 示例 var collection = element.getElementsByTagName('tagName'); // 获取指定元素的所有节点 var allNodes = document.getElementsByTagName('*'); // 获取所有 p 元素的节点 var elements = document.getElementsByTagName('p'); // 取出第一个 p 元素 var p = elements[0];
getElementsByClassName
Alle Knoten mit der angegebenen Klasse im angegebenen Element abrufen. Mehrere Klassenoptionen können unabhängig von der Reihenfolge durch Leerzeichen getrennt werden.
var elements = element.getElementsByClassName('className');
HINWEIS: IE9 und niedriger unterstützen getElementsByClassName
nicht
Kompatible Methoden
function getElementsByClassName(root, className) { // 特性侦测 if (root.getElementsByClassName) { // 优先使用 W3C 规范接口 return root.getElementsByClassName(className); } else { // 获取所有后代节点 var elements = root.getElementsByTagName('*'); var result = []; var element = null; var classNameStr = null; var flag = null; className = className.split(' '); // 选择包含 class 的元素 for (var i = 0, element; element = elements[i]; i++) { classNameStr = ' ' + element.getAttribute('class') + ' '; flag = true; for (var j = 0, name; name = className[j]; j++) { if (classNameStr.indexOf(' ' + name + ' ') === -1) { flag = false; break; } } if (flag) { result.push(element); } } return result; } }
querySelector / querySelectorAll
Rufen Sie das erste Element oder alle Elemente einer Liste ab (das Rückgabeergebnis wird durch nachfolgende DOM-Änderungen nicht beeinflusst und ändert sich nach der Erfassung nicht), das mit dem eingehenden CSS-Selektor übereinstimmt.
var listElementNode = element.querySelector('selector'); var listElementsNodes = element.querySelectorAll('selector'); var sampleSingleNode = element.querySelector('#className'); var sampleAllNodes = element.querySelectorAll('#className');
HINWEIS: IE9 unterstützt querySelector und querySelectorAll nicht
Knoten erstellen
Knoten erstellen -> Eigenschaften festlegen -> Knoten einfügen
var element = document.createElement('tagName');
Knoten ändern
textContent
Ruft den Textinhalt des Knotens und seiner untergeordneten Knoten ab oder legt diesen fest (für den gesamten Textinhalt im Knoten).
element.textContent; // 获取 element.textContent = 'New Content';
HINWEIS: IE 9 und niedriger werden nicht unterstützt.
innerText (nicht W3C-kompatibel)
Ruft den Textinhalt des Knotens und seiner Nachkommen ab oder legt ihn fest. Es funktioniert fast identisch mit textContent.
element.innerText;
HINWEIS: Entspricht nicht den W3C-Spezifikationen und unterstützt den Firefox-Browser nicht.
FireFox-Kompatibilitätslösung
if (!('innerText' in document.body)) { HTMLElement.prototype.__defineGetter__('innerText', function(){ return this.textContent; }); HTMLElement.prototype.__defineSetter__('innerText', function(s) { return this.textContent = s; }); }
Knoten einfügen
appendChild
Fügen Sie einen Elementknoten innerhalb des angegebenen Elements hinzu.
var aChild = element.appendChild(aChild);
insertBefore
Fügen Sie das angegebene Element vor dem angegebenen Knoten des angegebenen Elements ein.
var aChild = element.insertBefore(aChild, referenceChild);
Knoten löschen
Löschen Sie die untergeordneten Elementknoten des angegebenen Knotens.
var child = element.removeChild(child);
innerHTML
Alle HTML-Inhalte im angegebenen Knoten abrufen oder festlegen. Ersetzt alle vorherigen internen Inhalte und erstellt einen völlig neuen Stapel von Knoten (wobei zuvor hinzugefügte Ereignisse und Stile entfernt werden). innerHTML prüft den Inhalt nicht, wird direkt ausgeführt und ersetzt den ursprünglichen Inhalt.
HINWEIS: Dies wird nur beim Erstellen eines brandneuen Knotens empfohlen. Darf nicht unter Benutzerkontrolle verwendet werden.
var elementsHTML = element.innerHTML;
存在的问题+
- 低版本 IE 存在内存泄露
- 安全问题(用户可以在名称中运行脚本代码)
PS: appendChild() , insertBefore()插入节点需注意的问题
使用appendChild()和insertBefore()插入节点都会返回给插入的节点,
//由于这两种方法操作的都是某个节点的子节点,所以必须现取得父节点,代码中 someNode 表示父节点 //使用appendChild()方法插入节点 var returnedNode = someNode.appendChild(newNode); alert(returnedNode == newNode) //true //使用insertBefore()方法插入节点 var returnedNode = someNode.appendChild(newNode); alert(returnedNode == newNode) //true
值得注意的是,如果这两种方法插入的节点原本已经存在与文档树中,那么该节点将会被移动到新的位置,而不是被复制。
<div id="test"> <div>adscasdjk</div> <div id="a">adscasdjk</div> </div> <script type="text/javascript"> var t = document.getElementById("test"); var a = document.getElementById('a'); //var tt = a.cloneNode(true); t.appendChild(a); </script>
在这段代码中,页面输出的结果和没有Javascript时是一样的,元素并没有被复制,由于元素本来就在最后一个位置,所以就和没有操作一样。如果把id为test的元素的两个子元素点换位置,就可以在firbug中看到这两个div已经被调换了位置。
如果我们希望把id为a的元素复制一个,然后添加到文档中,那么必须使被复制的元素现脱离文档流。这样被添加复制的节点被添加到文档中之后就不会影响到文档流中原本的节点。即我们可以把复制的元素放到文档的任何地方,而不影响被复制的元素。下面使用了cloneNode()方法,实现节点的深度复制,使用这种方法复制的节点会脱离文档流。当然,我不建议使用这种方法复制具有id属性的元素。因为在文档中id值是唯一的。
<div id="test"> <div>adscasdjk</div> <div id="a">adscasdjk</div> </div> <script type="text/javascript"> var t = document.getElementById("test"); var a = document.getElementById('a'); var tt = a.cloneNode(true); t.appendChild(tt); </script>
相似的操作方法还有 removeNode(node)删除一个节点,并返回该节;replaceNode(newNode,node)替换node节点,并返回该节点。这两种方法相对来说更容易使用一些。

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)