首页 > web前端 > css教程 > 如何使用 JavaScript 访问 CSS 生成的内容和计数器?

如何使用 JavaScript 访问 CSS 生成的内容和计数器?

Mary-Kate Olsen
发布: 2024-12-02 22:19:10
原创
616 人浏览过

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

在 JavaScript 中访问 CSS 生成的内容和计数器

背景

使用 CSS 计数器时和内容属性,以在网页上生成编号的标题和图形,并访问这些的实时值对于向图形添加引用链接等场景,计数器和从 JavaScript 生成的内容可能是必需的。

GetCompulatedStyle 的限制

虽然 window.getComputedStyle() 可以提供对 CSS 的深入了解属性,它在这种情况下有所不足,因为它从样式表中检索声明的值而不是实际的实时值。对于计数器,甚至没有可访问的 CSS 属性可供查询。

Firefox 的 DOM Level 2 样式计数器

DOM Level 2 样式计数器界面的初步探索提出了一个解决方案,但问题仍然存在,因为 Counter 对象也缺少用于检索当前计数器的属性

方法一:暴力算法

在没有直接接口的情况下,一种选择是手动遍历 DOM,用计数器和根据它们的出现增加计数。然而,这种方法非常耗费资源,并且容易出现跨浏览器的兼容性问题。

方法二:基于脚本的计数器

另一种方法是替换 CSS-基于计数器与基于脚本的等效项。这涉及为元素分配唯一的 ID,并使用自定义脚本遍历文档并根据元素层次结构递增计数器,类似于下面的示例代码:

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);
        }
      }
    }
  }
};
登录后复制

通过实现这样的脚本,可以以独立于浏览器的方式有效跟踪和操作计数器。

以上是如何使用 JavaScript 访问 CSS 生成的内容和计数器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板