Heim > Web-Frontend > CSS-Tutorial > Wie kann ich mit JavaScript auf CSS-generierte Inhalte und Zähler zugreifen?

Wie kann ich mit JavaScript auf CSS-generierte Inhalte und Zähler zugreifen?

Mary-Kate Olsen
Freigeben: 2024-12-02 22:19:10
Original
559 Leute haben es durchsucht

How Can I Access CSS-Generated Content and Counters Using JavaScript?

Zugriff auf CSS-generierte Inhalte und Zähler in JavaScript

Hintergrund

Bei Verwendung des CSS-Zählers und Inhaltseigenschaften, um nummerierte Überschriften und Abbildungen auf einer Webseite zu generieren und auf die Echtzeitwerte dieser Zähler und generierten Inhalte aus JavaScript zuzugreifen kann für Szenarien wie das Hinzufügen referenzieller Links zu Abbildungen erforderlich werden.

Einschränkungen von GetComputedStyle

window.getComputedStyle() kann zwar Einblicke in CSS-Eigenschaften liefern, greift jedoch zu kurz Dieser Kontext wird verwendet, da er die deklarierten Werte aus dem Stylesheet abruft und nicht die tatsächlichen Live-Werte. Für Zähler gibt es nicht einmal eine zugängliche CSS-Eigenschaft zum Abfragen.

Firefox's DOM Level 2 Style Counter

Eine erste Erkundung der DOM Level 2 Style Counter-Schnittstelle schlug eine Lösung vor, aber das Problem blieb bestehen, da dem Counter-Objekt auch eine Eigenschaft zum Abrufen des aktuellen Zählers fehlte Wert.

Ansatz Eins: Brute-Force-Algorithmus

In Ermangelung einer direkten Schnittstelle besteht eine Möglichkeit darin, das DOM manuell zu durchlaufen und jedes Element mit Zählern und zu identifizieren Erhöhen der Anzahl basierend auf ihrem Auftreten. Dieser Ansatz ist jedoch sehr ressourcenintensiv und anfällig für Kompatibilitätsprobleme zwischen den Browsern.

Ansatz zwei: Skriptbasierte Zähler

Eine Alternative besteht darin, die CSS- basierte Zähler mit skriptbasierten Äquivalenten. Dazu gehört die Zuweisung eindeutiger IDs zu Elementen und die Verwendung eines benutzerdefinierten Skripts zum Durchlaufen des Dokuments und zum Erhöhen von Zählern basierend auf der Elementhierarchie, ähnlich dem folgenden Beispielcode:

function Node_getElementsByClassName(element, classNames) {
  var results = [];
  var elements;
  if (typeof element.getElementsByClassName === "function") {
    elements = element.getElementsByClassName(classNames);
    for (var i = 0, l = elements.length; i < l; ++i) {
      results.push(elements[i]);
    }
  }
  return results;
}

function Element_getClassArgument(element, argumentName) {
  var result = null;
  var className = element.getAttribute("class");
  if (className) {
    var pattern = new RegExp("(^|\s)" + argumentName + "=([^\s]+)", "i");
    var match = pattern.exec(className);
    if (match) {
      result = match[2];
    }
  }
  return result;
}

window.onload = function() {
  var counters = Node_getElementsByClassName(document.body, "counter");
  var indices = [];
  for (var counteri = 0; counteri < counters.length; counteri++) {
    var counter = counters[counteri];

    var level = Element_getClassArgument(counter, "level");
    while (indices.length <= level) {
      indices.push(0);
    }
    indices[level]++;
    indices = indices.slice(level + 1);
    var text = document.createTextNode(
      "Figure " + indices.join(".")
    );
    counter.parentNode.insertBefore(text, counter.nextSibling);

    if (counter.id !== "") {
      for (var linki = document.links.length; linki--; ) {
        var link = document.links[linki];
        if (
          link.hostname === location.hostname &&
          link.pathname === location.pathname &&
          link.search === location.search &&
          link.hash === "#" + counter.id
        ) {
          var text = document.createTextNode("(" + indices.join(".") + ")");
          link.parentNode.insertBefore(text, link.nextSibling);
        }
      }
    }
  }
};
Nach dem Login kopieren

Durch die Implementierung eines solchen Skripts wird dies möglich Verfolgen und manipulieren Sie Zähler effizient und browserunabhängig.

Das obige ist der detaillierte Inhalt vonWie kann ich mit JavaScript auf CSS-generierte Inhalte und Zähler zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage