Maison > interface Web > tutoriel CSS > Comment puis-je accéder au contenu et aux compteurs générés par CSS à l'aide de JavaScript ?

Comment puis-je accéder au contenu et aux compteurs générés par CSS à l'aide de JavaScript ?

Mary-Kate Olsen
Libérer: 2024-12-02 22:19:10
original
559 Les gens l'ont consulté

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

Accès au contenu et aux compteurs générés par CSS en JavaScript

Contexte

Lors de l'utilisation du compteur CSS et propriétés de contenu pour générer des en-têtes et des chiffres numérotés sur une page Web, en accédant aux valeurs en temps réel de ces compteurs et au contenu généré à partir de JavaScript. peut devenir nécessaire pour des scénarios tels que l'ajout de liens référentiels vers des figures.

Limites de GetComputedStyle

Bien que window.getComputedStyle() puisse fournir des informations sur les propriétés CSS, il ne parvient pas à ce contexte car il récupère les valeurs déclarées de la feuille de style plutôt que les valeurs réelles en direct. Pour les compteurs, il n'y a même pas de propriété CSS accessible à interroger.

Compteur de style DOM niveau 2 de Firefox

Une première exploration de l'interface du compteur de style DOM niveau 2 a suggéré une solution, mais le problème a persisté car l'objet Counter n'avait pas non plus de propriété pour récupérer le compteur actuel. valeur.

Première approche : algorithme de force brute

En l'absence d'interface directe, une option consiste à parcourir manuellement le DOM, en identifiant chaque élément avec des compteurs et incrémentant le décompte en fonction de leur occurrence. Cependant, cette approche est très gourmande en ressources et sujette à des problèmes de compatibilité entre les navigateurs.

Approche deux : compteurs basés sur des scripts

Une alternative consiste à remplacer le CSS- compteurs basés sur des équivalents basés sur des scripts. Cela implique d'attribuer des identifiants uniques aux éléments et d'utiliser un script personnalisé pour parcourir le document et incrémenter les compteurs en fonction de la hiérarchie des éléments, similaire à l'exemple de code ci-dessous :

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);
        }
      }
    }
  }
};
Copier après la connexion

En implémentant un tel script, il devient possible de suivez et manipulez efficacement les compteurs indépendamment du navigateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal