Beispielschritte zum Implementieren von Klassenselektoren und Namensattributselektoren in js

Beispielschritte zum Implementieren von Klassenselektoren und Namensattributselektoren in js

Das Aufkommen von jQuery hat unsere Effizienz beim Betrieb von DOM erheblich verbessert und unsere Entwicklung auf ein höheres Niveau gebracht. Beispielsweise ist der Selektor von jQuery eine sehr leistungsstarke Funktion. Er umfasst Klassenselektoren, ID-Selektoren, Attributselektoren, Elementselektoren, Ebenenselektoren, Inhaltsfilterselektoren usw. Er ist sehr praktisch und schnell, und diese Selektoren sind gut kompatibel. Man kann sagen, dass der Betrieb von DOM mit jq-Selektoren Spaß macht und immer Spaß machen wird! Allerdings hat das Aufkommen der drei großen Frameworks Vue, React und Angular die Nutzungshäufigkeit von JQuery stark reduziert. JQuery weist zwar bestimmte Leistungsprobleme und verschiedene Fallstricke beim Betrieb von DOM und beim Binden von Daten auf, kann aber die leistungsstarke Existenz von JQ beim Betrieb von DOM immer noch nicht auslöschen!

Nachdem wir nun so viel über die Großartigkeit von JQuery gesagt haben, stellt sich die Frage, wie viele seiner internen Prinzipien implementiert werden? Heute implementieren wir einfach einen Klassenselektor und einen Namensattributselektor ähnlich wie jQuery.

Klassenauswahl:

Funktion getElementsByClass(Klassenname) {
   var KlasseArr = [];
   var tags = document.getElementsByTagName("*");

   für (var i = 0; i < tags.Länge; i++) {
    wenn (tags[i].nodeType == 1) {
     wenn (tags[i].getAttribute("Klasse") == Klassenname) {
      classArr.push(tags[i]);
     }
    }
   }
   gib classArr zurück;
}

Tatsächlich ist der Namensattributselektor derselbe wie der Klassenselektor, aber die Beurteilungsbedingung ist geringfügig geändert:

Funktion getElementsByName(Name) {
   var nameArr = [];
   varnum = 0;
   var tags = document.getElementsByTagName("*");

   für (var i = 0; i < tags.Länge; i++) {
    wenn (tags[i].nodeType == 1) {
     wenn (tags[i].getAttribute("name") == name) {
      nameArr.push(tags[i]);
     }
    }
   }

   gib nameArr zurück;
}

Der Namensattributselektor wird hauptsächlich in Formularoperationen verwendet.

Im obigen Code gibt es ein nodeType-Attribut, mit dem der Knotentyp bestimmt wird. Es gibt 12 Werte für nodeType, 1 steht für das Knotenelement, 2 steht für das Attribut und 3 steht für den Textinhalt im Element oder Attribut. Diese drei Werte werden häufiger verwendet, während die anderen 9 eher selten zum Einsatz kommen. Wer mehr wissen möchte, kann einen Blick auf die API werfen. Hier müssen wir den Elementknoten abrufen, damit wir bestimmen können, ob der Knotentyp des aktuellen Elements 1 ist.

Hier ist eine weitere Möglichkeit, mittels Rekursion alle untergeordneten Knoten (einschließlich Enkelknoten) eines Elements abzurufen:

  /** 
   * Alle untergeordneten Knoten rekursiv abrufen * 
   Knoten stellt den übergeordneten Knotentypwert dar, für den Sie alle untergeordneten Knoten abrufen möchten:
   1 Element stellt ein Element dar. 2 Attr stellt ein Attribut dar. 3 Text stellt den Textinhalt in einem Element oder Attribut dar. 4 CDATASection stellt einen CDATA-Abschnitt in einem Dokument dar (Text, der nicht vom Parser analysiert wird).
   5 EntityReference steht für Entity-Referenz. 6 Entity steht für Entity. 7 ProcessingInstruction steht für Verarbeitungsanweisung. 8 Comment steht für Kommentar. 9 Document steht für das gesamte Dokument (den Stammknoten des DOM-Baums).
   10 DocumentType stellt eine Schnittstelle zu Entitäten bereit, die für ein Dokument definiert sind. 11 DocumentFragment stellt ein leichtes Dokumentobjekt dar, das einen Teil eines Dokuments enthalten kann. 12 Notation stellt ein in einer DTD deklariertes Symbol dar. */
  var allChildNodes = Funktion (Knoten, Typ) {
   // 1. Erstellen Sie ein Array aller Knoten var allCN = [];

   // 2. Alle Knoten rekursiv abrufen var getAllChildNodes = function (node, type, allCN) {
    // Alle untergeordneten Knoten des aktuellen Elements abrufen
    var Knoten = Knoten.Unterknoten;
    // Hole die untergeordneten Knoten der Knoten für (var i = 0; i < nodes.length; i++) {
     var Kind = Knoten[i];
     // Bestimmen Sie, ob es sich um einen Knoten des angegebenen Typs handelt, wenn (child.nodeType == Typ) {
      allCN.push(Kind);
     }
     getAllChildNodes(Kind, Typ, alleCN);
    }
   }
   getAllChildNodes(Knoten, Typ, allCN);
   // 3. Gibt das Array aller Knoten zurück return allCN;
  }

  // Anruf:
  // Alle Knoten im Textkörper abrufen allChildNodes(document.querySelector('body'), 1);
  
  //Alle Nur-Text-Knoten im Textkörper abrufen allChildNodes(document.querySelector('body'), 3)

Autor: Xiaohuai

Quelle: http://tnnyang.cnblogs.com

Oben sind die Einzelheiten der Beispielschritte zum Implementieren von Klassenselektoren und Namensattributselektoren in js aufgeführt. Weitere Informationen zum Implementieren von Klassenselektoren und Namensattributselektoren in js finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • js implementiert einen kreisförmigen Menüwähler
  • Eine allgemeine Diskussion über JS-Selektoren für logische Urteile || &&
  • Selektoren in JavaScript verstehen
  • Verwenden Sie den iView-Datumswähler in Vue.js und legen Sie die Überprüfungsfunktion für Start- und Endzeit fest
  • Implementierungsmethode für mehrstufige Verknüpfungsselektoren in Vue2.0.js
  • Eine kurze Diskussion über die gängigen Selektoren, Attribute und Methodenaufrufe in JS
  • Beispiel für eine Javascript-Kapselungs-ID, eine Klassen- und Elementauswahlmethode
  • JS imitiert die JQuery-Selektorfunktion
  • Eine kurze Erläuterung zur Verwendung von $(#ID) als Selektor in js (wenn die ID wiederholt wird)
  • js implementiert ein vollständiges Beispiel für einen sekundengenauen Datumswähler

<<:  Befehle zum Deaktivieren und Aktivieren von MySQL-Fremdschlüsseleinschränkungen

>>:  So deaktivieren Sie die Überprüfung auf Fremdschlüsseleinschränkungen in untergeordneten MySQL-Tabellen

Artikel empfehlen

Analyse der allgemeinen Konfigurationsmethoden für virtuelle Hosts von Apache

1. Installation und Konfiguration des Apache-Serv...

Vue-pdf implementiert eine Online-Vorschau von PDF-Dateien

Vorwort In den meisten Projekten werden Sie auf e...

Mysql 5.6.37 Winx64-Installation Dual-Version MySQL-Hinweise

Wenn MySQL Version 5.0 bereits auf dem Computer v...

Wissen Sie, wie Sie mit Vue Screenshots von Webseiten erstellen?

Inhaltsverzeichnis 1. Installieren Sie html2Canva...

Implementierung des Docker View Container Log-Befehls

Warum sollten wir das Protokoll lesen? Wenn beisp...

Tutorial zur Installation von Elasticsearch 7.6.2 in Docker

Docker installieren Sie müssen Docker installiere...

Tipps zur MySql-SQL-Optimierung teilen

Eines Tages stellte ich fest, dass die Ausführung...

Lösung für mehrere Docker-Container, die nicht die gleiche Portnummer haben

Hintergrund In Docker werden vier Container mit d...

Detailliertes Tutorial zur Installation von CUDA9.0 auf Ubuntu16.04

Vorwort: Dieser Artikel basiert auf den Erfahrung...

Mehrere Möglichkeiten zum Festlegen der Ablaufzeit von localStorage

Inhaltsverzeichnis Problembeschreibung 1. Basislö...

So installieren Sie Docker unter Windows 10 Home Edition

Ich habe Docker kürzlich verwendet, um ein Projek...

Detaillierte Erklärung der Truncate-Verwendung in MySQL

Anleitung in diesem Artikel: Es gibt zwei Möglich...