Je génère la numérotation de mes en-têtes et de mes figures à l'aide de CSS. counter
y content
propriétés :
img.figure:after {
counter-increment: figure;
content: "Fig. " counter(section) "." counter(figure);
}
Ceci (en supposant un navigateur approprié) donne un étiquetage agréable "Fig. 1.1", "Fig. 1.2" et ainsi de suite à la suite de toute image.
Question : Comment puis-je y accéder à partir de Javascript ? La question est double : j'aimerais accéder à soit la valeur actuelle d'un certain compteur (à un certain nœud du DOM) o la valeur du contenu généré par le CSS (à un certain nœud du DOM) o évidemment, les deux informations.
Le contexte : J'aimerais ajouter aux liens qui renvoient aux chiffres le numéro approprié, comme ceci :
<a href="#fig1">see here</h>
------------------------^ " (Fig 1.1)" inserted via JS
D'après ce que je vois, cela se résume à ce problème : I pourrait accès content
o counter-increment
via getComputedStyle
:
var fig_content = window.getComputedStyle(
document.getElementById('fig-a'),
':after').content;
Cependant, ce n'est pas le en direct mais celle qui est déclarée dans la feuille de style. Je ne trouve pas d'interface permettant d'accéder à la réel valeur vivante. Dans le cas du compteur, il n'y a même pas de propriété CSS réelle à interroger.
Editar: En creusant de plus en plus profondément dans les spécifications DOM, j'ai trouvé l'interface DOM Level 2 Style Counter . Cela semble a) permettre l'accès à la valeur actuelle du compteur et b) être implémenté dans Firefox, au moins. Cependant, je n'ai aucune idée de la manière de l'utiliser. Mon approche actuelle est morte tragiquement après cette sortie de 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"]
Toute idée sur la manière de donner vie à ce projet serait très appréciée.
Edit 2 : Apparemment, j'ai mal interprété l'objet Counter du DOM Level 2 Style. Lui non plus n'a pas de propriété pour retourner la valeur actuelle du compteur. Cela rend l'approche ci-dessus invalide.
Nouvelle approche : Existe-t-il une possibilité de lire le contenu d'un pseudo-élément via le DOM ? C'est-à-dire, puis-je sélectionner le pseudo-élément ( treeWalker
me vient à l'esprit) et ensuite obtenir son nodeValue
? (Si vous commencez à taper jQuery maintenant, s'il vous plaît reconsidérez de changer ce terme en "Sizzle ...)