Я генерирую нумерацию своих заголовков и цифр с помощью свойств CSS counter
и content
:
img.figure:after {
counter-increment: figure;
content: "Fig. " counter(section) "." counter(figure);
}
Это (соответствующий браузер) дает хорошую маркировку "Рисунок 1.1", "Рисунок 1.2" и т.д. после любого изображения.
Вопрос: Как я могу получить доступ к этому из Javascript? Вопрос двояк в том, что я хотел бы получить доступ либо к текущему значению определенного счетчика (при определенном DOM node), либо о значении CSS-контента (в некотором DOM node) или, обе информации.
Фон: я хотел бы добавить к ссылкам обратную ссылку на цифры соответствующего номера, например:
<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 уровня 2. Это, по-видимому, 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: По-видимому, я неверно истолковал объект Counter объекта DOM Level 2 Style. Он также не имеет свойства для возврата текущего значения счетчика. Это делает вышеуказанный подход недействительным.
Новый подход: есть ли возможность прочитать содержимое псевдоэлемента через DOM? То есть, могу ли я выбрать псевдоэлемент (treeWalker
приходит на ум), а затем получить его nodeValue
? (Если вы начнете вводить "jQuery" сейчас, передумайте, чтобы изменить этот термин на "Sizzle"...)