Я генерирую нумерацию своих заголовков и цифр с помощью свойств 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;
Однако это не значение live , а значение, объявленное в таблице стилей. Я не могу найти интерфейс для доступа к действительному значению real . В случае счетчика нет даже реального CSS-свойства для запроса.
Редактировать: Копая глубже и глубже через спецификации DOM, я нашел интерфейс счетчика стилей DOM Level 2 . Похоже, это а) разрешает доступ к текущему значению счетчика и б) по крайней мере реализовано в 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: Видимо, я неверно истолковал объект Counter в стиле DOM Level 2. У него тоже нет свойства для возврата текущего значения счетчика. Это делает вышеуказанный подход недействительным.
Новый подход: есть ли возможность читать содержимое псевдоэлемента через DOM? То есть я могу выбрать псевдоэлемент (на ум приходит treeWalker
) и затем получить его nodeValue
? (Если вы начнете набирать 'jQuery' сейчас, пожалуйста, измените этот термин на 'Sizzle' ...)