Rumah > hujung hadapan web > tutorial css > Bagaimanakah Saya Boleh Mengakses Kandungan dan Kaunter Dijana CSS Menggunakan JavaScript?

Bagaimanakah Saya Boleh Mengakses Kandungan dan Kaunter Dijana CSS Menggunakan JavaScript?

Mary-Kate Olsen
Lepaskan: 2024-12-02 22:19:10
asal
616 orang telah melayarinya

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

Mengakses Kandungan dan Kaunter Dijana CSS dalam JavaScript

Latar Belakang

Apabila menggunakan kaunter CSS dan sifat kandungan untuk menjana pengepala dan angka bernombor pada halaman web, mengakses nilai masa nyata ini pembilang dan kandungan yang dijana daripada JavaScript mungkin diperlukan untuk senario seperti menambah pautan rujukan kepada angka.

GetComputedStyle's Limitation

Sementara window.getComputedStyle() boleh memberikan cerapan tentang CSS hartanah, ia kurang dalam konteks ini kerana ia mendapatkan semula nilai yang diisytiharkan daripada lembaran gaya dan bukannya nilai langsung sebenar. Untuk kaunter, tiada sifat CSS yang boleh diakses untuk ditanya.

Kaunter Gaya DOM Tahap 2 Firefox

Penjelajahan awal antara muka Kaunter Gaya DOM Tahap 2 mencadangkan penyelesaian, tetapi masalah itu berterusan kerana objek Kaunter juga tidak mempunyai harta untuk mendapatkan semula kaunter semasa nilai.

Pendekatan Pertama: Algoritma Brute-force

Dengan ketiadaan antara muka langsung, satu pilihan ialah melintasi DOM secara manual, mengenal pasti setiap elemen dengan pembilang dan menambah kiraan berdasarkan kejadiannya. Walau bagaimanapun, pendekatan ini sangat intensif sumber dan terdedah kepada isu keserasian merentas penyemak imbas.

Pendekatan Kedua: Kaunter Berasaskan Skrip

Alternatifnya ialah menggantikan CSS- pembilang berasaskan dengan persamaan berasaskan skrip. Ini melibatkan pemberian ID unik kepada elemen dan menggunakan skrip tersuai untuk melintasi dokumen dan pembilang kenaikan berdasarkan hierarki elemen, serupa dengan kod contoh di bawah:

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);
        }
      }
    }
  }
};
Salin selepas log masuk

Dengan melaksanakan skrip sedemikian, ia menjadi mungkin untuk menjejak dan memanipulasi pembilang dengan cekap dalam cara yang bebas pelayar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Kandungan dan Kaunter Dijana CSS Menggunakan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan