我使用CSS counter
和content
属性生成标题和图的编号:
img.figure:after {
counter-increment: figure;
content: "Fig. " counter(section) "." counter(figure);
}
这个(假定合适的浏览器)在任何图像之后都带有漂亮的标签“图1.1”,“图1.2”,依此类推。
问题: 如何从Javascript访问此内容?现在的问题是双重在于我想访问 任一 特定计数器的当前值(在某一DOM节点) 或
所述CSS生成的内容的值(在某一DOM节点) 或 ,很明显,这两个信息。
背景: 我想在链接后面附加指向数字的适当数字,如下所示:
<a href="#fig1">see here</h>
------------------------^ " (Fig 1.1)" inserted via JS
据我所看到的,把它归结为这个问题:我 可以 访问content
或counter-increment
通过getComputedStyle
:
var fig_content = window.getComputedStyle(
document.getElementById('fig-a'),
':after').content;
但是,这不是 实时 值,而是样式表中声明的值。我找不到任何接口来访问 真实的 实时价值。在计数器的情况下,甚至没有真正的CSS属性可查询。
编辑: 深入研究DOM规范,我发现了DOM Level 2 Style Counter接口。这似乎是:a)允许访问当前计数器值,以及b)至少在Firefox中实现。但是,我不知道如何使用它。在此Firebug输出之后,我当前的方法不幸死了:
// should return a DOM 2 Counter interface implementation...
window.getComputedStyle(fig_a_element, ':after')
.getPropertyCSSValue("counter-increment")[0]
.getCounterValue();
[Exception... "Modifications are not allowed for this document" code: "7"
nsresult: "0x80530007 (NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)"
location: "http://localhost/countertest.html Line: 71"]
任何想法,如何将其变为现实将受到高度赞赏。
编辑2: 显然我误解了DOM级别2样式的Counter对象。它也没有返回当前计数器值的属性。这使得上述方法无效。
新方法:是否可以通过DOM读取伪元素的内容?也就是说,我可以选择伪元素(treeWalker
想到)然后获得它nodeValue
吗?(如果您现在开始输入
‘jQuery’ ,请重新考虑将其更改为 ‘Sizzle’ …)
我找不到任何接口来访问真实的实时价值。[柜台]
是的 我不认为有一个。抱歉。
我唯一想到的就是遍历文档中该元素之前的每个元素(包括其:before
/ :after
伪元素),查找计数器并累加多少。
显然,这很可怕。如果您要尝试重现浏览器自己的counter
机制,则将其替换为您自己的基于脚本的计数器可能会更容易(并且兼容性更好,因为IE <=
7缺乏计数器/内容支持)。例如。类似于以下内容:
<a href="#prettypicture">this</a>
<div class="counter level=0">...</div>
<img id="prettypicture" class="counter level=1" alt="ooo, pretty"/>
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-->0;) {
var link= document.links[i];
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);
}
}
}
}
};
我可以想象其他类似的情况,源代码的某些部分被作为构建的一部分进行处理,而这个过程的结果文件却不是源代码本身的一部分(缩微、聚合、混淆、SASS、Less等)。 我读到,在Spring Boot中,静态内容应该存储在/meta-inf/resources/,/resources/,/static/,/public/下的类路径中的某个位置。但是生成的内容应该输出到哪里呢? 我可以将插件的输出目录更改为
需要一个用作所有函数的返回类型的类型。如果我需要生成一个AST,我应该使用什么返回类型?ANTLR3使用了 对象。 当输入节点时,我可以创建树的一个节点,但应该如何跟踪它的父节点? 关于如何将树重写规则转换为生成AST节点的方法,是否有任何示例?如果不是,是否可以为下面的规则提供一个示例? 下面是(3)的规则:
问题内容: 是否可以获取文档中CSS文件的全部文本内容?F.ex: 我不是真的通过document.styleSheets获取所有CSS规则,还有另一种方法吗? 更新: 当然有ajax选项,我感谢给出的答案。但是似乎没有必要使用已经在浏览器中加载的ajax重新加载文件。因此,如果有人知道提取当前CSS文件的文本内容的另一种方法(不是CSS规则),请发表! 问题答案: 如果样式表包含在同一个域中,则
问题内容: 我可以让CSS通过使用生成的内容来显示元素的ID,如下所示: 如何使生成的内容(“#my-id”)可选,以便用户突出显示和复制它? 问题答案: 您无法选择伪元素,因为它在DOM中不存在。 伪元素或伪类都不会出现在文档源或文档树中。
问题内容: 我有一个网页,其中iframe内有一个texarea。我需要从其子页面javascript读取此textarea的值。目前,通过在javascript中使用,我能够提取父页面中除iframe中的textarea之外的所有控件的值。 父页面中的框架ID和框架名称在运行时会更改,因此我们无法使用框架ID /框架名称作为参考。 问题答案: 如果您有HTML 和JavaScript 现在是对文
问题内容: 我搞砸了SVG,希望能在Illustrator中创建SVG文件并使用Javascript访问元素。 这是Illustrator推出的SVG文件(它似乎也向我删除的文件的开头添加了一些垃圾) 正如您可能看到的那样,每个元素都有一个ID,我希望能够使用Javascript访问单个元素,以便我可以更改Fill属性并响应诸如click之类的事件。 HTML是基本的 我想这真的是两个问题。 与使