Maison >interface Web >js tutoriel >Amélioration du balisage structurel avec JavaScript
Points clés
cite
Référence du bloc
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }Examinons de plus près le corps de la fonction.
var quotes = document.getElementsByTagName('blockquote');
Cette ligne de code utilise la méthode DOM getElementsByTagName
pour trouver tous les éléments de référence de bloc dans la page actuelle et les attribuer à un tableau nommé quotes
(en fait htmlcollection, mais c'est une structure de données qui se comporte comme un tableau).
for (var i = 0; i < quotes.length; i ) { ... }
Maintenant, nous traversons le nœud de référence du bloc collecté. Chaque fois que nous boucons, nous utilisons la méthode getAttribute
pour récupérer l'attribut cite de l'élément. Si la propriété CITE est définie, nous passerons à la partie intéressante: créer un lien "source" au bas de la citation.
var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite);
Lorsque nous voulons ajouter dynamiquement de nouveaux éléments HTML à la page à l'aide du DOM, la bonne façon de le faire est de créer ces éléments par programme à l'aide de la méthode createElement
. Les lignes ci-dessus créent un nouvel élément «A» et l'attribuent les attributs HREF et Title, qui sont tous deux définis comme URL de la citation.
a.appendChild(document.createTextNode('Source'));
Nous voulons que l'élément de lien contienne un texte que les utilisateurs peuvent cliquer pour activer le lien. Le nœud de texte d'origine est créé à l'aide de la méthode createTextNode
. DOM traite les éléments HTML comme composant un arbre, donc pour ajouter du texte à notre lien nouvellement créé, nous devons appeler sa méthode appendChild
.
var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a);
Pour nous permettre de styliser de nouveaux liens de manière flexible à l'aide de CSS, nous pouvons l'envelopper dans un élément de paragraphe. Le code ci-dessus crée un tel élément, définit sa classe sur "Blockquotesource" pour fournir un crochet CSS, puis ajoute le lien à lui en utilisant appendChild
. À ce stade, le nouveau fragment de document que nous avons construit est équivalent à la HTML suivante:
<code><p> <a href="https://www.php.cn/link/a725c77dfdec0a53250d0709ed36e1fe" title="https://www.php.cn/link/a725c77dfdec0a53250d0709ed36e1fe">Source</a> </p>
À l'heure actuelle, notre extrait est toujours invisible car bien que nous l'ayons créé en mémoire, nous ne l'avons pas encore attachée à notre documentation. C'est ce que fait la dernière ligne de la fonction:
quotes[i].appendChild(p);
quotes[i]
appendChild
est l'élément de référence de bloc sur lequel nous travaillons actuellement.
Il y a deux étapes supplémentaires. Tout d'abord, nous devons exécuter la fonction ci-dessus lorsque la page est chargée pour la première fois. Il existe de nombreuses façons d'y parvenir. Le moyen le plus simple est d'ajouter un appel à la fonction à la propriété Onload de l'élément corporel du document:
Cela fonctionne bien, mais nous pouvons le faire mieux. Étant donné que nos fonctions JavaScript seront hébergées dans des fichiers externes, ne serait-il pas plus significatif pour que les fichiers externes entraînent l'exécution des fonctions? L'approche naïve consiste à utiliser le code JavaScript suivant:
window.onload = extractBlockquoteCitations;
//
Notez que nous fournissons le nom de la fonction, mais ignorez le () à la fin, ce qui entraînera l'exécution de la fonction. JavaScript prend en charge le style de programmation fonctionnelle, ce qui signifie que les fonctions peuvent être transmises sous forme de paramètres, stockées dans des structures de données, et peuvent même être renvoyées à partir d'autres fonctions comme tout autre objet de données. Je vais discuter de ce sujet davantage dans les prochains articles, mais le résultat est que l'attribution de la fonction à window.onload
le fera exécuter après le chargement de la page.
Cependant, cette solution présente également un inconvénient. Si vous souhaitez utiliser plusieurs scripts exécutés une fois la charge de page terminée sur une page donnée, le dernier script qui s'inscrit à window.onload
sera le seul script qui s'exécute. Ce qui est vraiment nécessaire, c'est un moyen de fixer notre fonction au gestionnaire Onload de l'objet Window sans écraser ce qui est déjà là. Malheureusement, Internet Explorer et d'autres navigateurs diffèrent dans la façon de gérer de telles pièces jointes dynamiques; Ce qui suit est la fonction:
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }
Ce qui suit est le code pour ajouter notre fonction BlockQuotes à l'événement de charge de l'objet de fenêtre:
addEvent(window, 'load', extractBlockquoteCitations);
La dernière étape consiste à coiffer la citation avec CSS. Voici un extrait de code CSS relativement simple qui gère les références de blocs:
function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } }
Le produit fini peut être consulté ici.
Maintenant, considérons un effet dynamique plus avancé - le commutateur de panneau. L'objectif ici est de placer plusieurs panneaux sur la page (en utilisant des balises Div) et d'afficher un seul panneau à la fois. Un ensemble de liens toujours visibles peut être utilisé pour sélectionner le panneau actuellement affiché. Ceci est utile pour créer des interfaces à onglets pour parcourir une gamme d'écrans associés sans rafraîchir la page à chaque fois que vous sélectionnez un onglet.
Chaque fois que vous utilisez JavaScript pour améliorer votre page, vous devez vous souvenir d'une bonne règle selon laquelle la page doit toujours être disponible même si JavaScript est désactivé. Dans ce cas, cela signifie que la solution idéale devrait fonctionner comme annoncé lorsque JavaScript est activé, mais dans un environnement non javascript, tous les panneaux doivent être affichés sur la page, chaque lien se liant directement au panneau pertinent et en utilisant des extraits URL.
Alors, c'est la marque la plus simple qui puisse fonctionner:
Étonnamment, ce qui précède est presque tout le balisage dont nous avons besoin pour accrocher un javascript pour créer l'effet souhaité. Nous pouvons continuer avec le code ci-dessus, mais ajoutons une classe au lien pour indiquer clairement que nous voulons effectuer des opérations spéciales sur eux:
<a href="https://www.php.cn/link/65dfa16ba6de9bdb34ea435c9fe2a425" class="toggle">Panel 1</a> | <a href="https://www.php.cn/link/379d08c7a38df48c777c07ea990a3bcf" class="toggle">Panel 2</a>
//
Ce qui suit est de savoir comment fonctionne JavaScript. Lorsque la page se charge, le script analysera tous les liens sur la page pour tous les liens qui contiennent "basculer" dans sa classe. Pour tous les liens trouvés, l'attribut HREF est vérifié et l'élément spécifié est positionné et ajouté au tableau d'élément cible. Tous les autres éléments sauf le premier élément seront "fermés", donc lorsque la page se chargera, seul le premier panneau restera visible. Le lien lui-même attachera un gestionnaire d'événements JavaScript de sorte que lorsqu'ils sont activés, leurs panneaux correspondants peuvent être affichés.
Le script complet peut être consulté ici. Ce qui suit est une explication étape par étape du fonctionnement du code.
var et_toggleElements = [];
La première ligne crée un tableau mondial vide qui enregistrera des références aux éléments du panneau sur la page. Parce que ce script a des variables globales et de nombreuses fonctions, nous préfixons chaque fonction avec "ET_" (pour "Toggle facile") - ce qui réduit la possibilité que notre fonction aura des conflits de nom avec d'autres scripts chargés sur la même page.
/* Initialisation */ function et_init() { var i, link, id, target, first; first = true; for (i = 0; (link = document.links[i]); i ) { ... }
Jusqu'à présent, nous avons initialisé certaines variables, réglé le premier drapeau sur true et commencé à itération de tous les liens du document. La déclaration des variables utilisant var
est très importante car elle garantit que la variable est locale à la fonction. Sans cette étape, ils seront accessibles à l'échelle mondiale et pourront interférer avec d'autres scripts.
if (/btoggleb/.exec(link.className)) { ... }
Cette condition vérifie si la classe actuellement liée contient "bascule". Nous utilisons des expressions régulières au lieu de simplement vérifier link.className == 'toggle'
, car les propriétés de classe peuvent contenir plusieurs classes, séparées par des espaces. /btoggleb/
est une expression régulière; b
correspond partiellement à la "limite du mot", qui peut être le début ou la fin d'un espace ou d'une chaîne.
id = link.href.split('#')[1];
Si la liste de classe liée contient une bascule, nous supposons que la cible de la liaison est un extrait d'URL.
link.href.split('#')
Divisez le lien href sur la balise # - nous savons que la partie qui nous intéresse est après #, nous indexons donc directement le tableau de résultat à l'aide de [1]
pour extraire l'ID cible.
target = document.getElementById(id); et_toggleElements[et_toggleElements.length] = target;
Ici, nous faisons une autre supposition que le lien indique que l'élément existe. Nous utilisons la méthode getElementById()
pour obtenir l'élément, puis l'ajoutons à notre tableau d'éléments en l'attribuant à un indice de tableau égal à la longueur actuelle du tableau. Cela fonctionne parce que le tableau commence à indexer à partir de 0, mais la longueur du tableau compte de 1; donc, la longueur du tableau est également l'indice de la fente vide suivante dans le tableau.
if (first) { first = false; } else { target.style.display = 'none'; }
C'est là que le premier logo que nous avons défini plus tôt entre en jeu. Nous voulons que le premier panneau sur le site Web reste visible, tandis que les autres sont cachés en utilisant JavaScript équivalent à "Afficher: aucun" dans CSS. Ce drapeau nous permet de le faire.
link.onclick = et_toggle;
Enfin, nous attribuons la fonction et_toggle
à l'événement lié onclick
, ce qui fait que la fonction est appelée chaque fois que le lien est activé. L'étape suivante consiste à définir la fonction.
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }
Encore une fois, nous utilisons la méthode split
pour extraire l'ID du lien.
Maintenant que nous savons quel panneau afficher, nous pouvons parcourir notre tableau d'éléments et fermer tous les autres éléments, sauf celui dont l'ID correspond à l'ID du panneau souhaité.
En retournant Faux, nous empêchons le lien de suivre réellement lorsqu'il est activé, ce qui peut provoquer des sauts indésirables sur les pages visionnées dans le navigateur.
La dernière étape consiste à enregistrer la fonction addEvent
à l'événement de charge de la fenêtre en utilisant la fonction et_init
décrite précédemment.
addEvent(window, 'load', et_init);
Vous pouvez afficher le code d'achèvement en cours d'exécution ici.
Dans cet article, nous voyons deux façons que les marqueurs bien structurés peuvent être utilisés avec JavaScript et DOM W3C pour des effets utiles. J'espère que ce post vous inspire à trouver de nouvelles façons d'utiliser JavaScript et le tagging intelligent.
Il existe de nombreux autres excellents exemples d'effets JavaScript basés sur des balises structurées. Voici quelques exemples qui valent la peine d'être prêts à faire attention:
Les balises structurées en JavaScript sont l'utilisation d'éléments HTML pour décrire le contenu et la structure d'un document Web. Ces éléments comprennent des titres, des paragraphes, des listes, etc. JavaScript peut manipuler ces éléments pour créer des pages Web dynamiques et interactives. Par exemple, JavaScript peut modifier le contenu d'un élément HTML, modifier le style (CSS) d'un élément HTML et même ajouter de nouveaux éléments HTML.
JavaScript interagit avec les éléments HTML via le modèle d'objet de document (DOM). DOM représente la structure d'une page Web, que JavaScript peut fonctionner. Par exemple, JavaScript peut utiliser la méthode document.createTextNode()
pour créer un nouveau nœud de texte, puis l'ajouter à un élément HTML existant.
Un nœud de texte dans JavaScript est un type de nœud qui représente le contenu texte d'un élément ou d'un attribut. Il peut être créé à l'aide de la méthode document.createTextNode()
. Cette méthode crée un nouveau nœud de texte qui peut être attaché à un élément HTML existant, vous permettant d'ajouter dynamiquement du texte à la page Web.
JavaScript peut être ajouté à HTML de plusieurs manières. Vous pouvez utiliser la balise <script></script>
pour l'inclure directement dans un fichier html, ou vous pouvez utiliser l'attribut <script></script>
de la balise src
pour lier vers un fichier javascript externe. Vous pouvez également utiliser des propriétés d'événements telles que onclick
ou onload
pour exécuter du code JavaScript lorsqu'un événement spécifique se produit.
document.createTextNode()
? document.createTextNode()
est utilisée pour créer un nouveau nœud de texte. Appelez d'abord cette méthode avec le texte que vous souhaitez ajouter en tant que paramètre. Cela renvoie un nouveau nœud de texte, qui peut ensuite être attaché à un élément HTML existant à l'aide de la méthode appendChild()
.
Document Object Model (DOM) est l'interface de programmation pour les documents HTML et XML. Il représente la structure d'un document en tant qu'arbre d'objets, chaque objet représentant une partie du document. JavaScript peut interagir avec le DOM pour manipuler le contenu et la structure d'une page Web.
Vous pouvez modifier le contenu d'un élément HTML à l'aide de l'attribut innerHTML
dans JavaScript. Cette propriété peut être utilisée pour obtenir ou définir le contenu HTML d'un élément. Par exemple, s'il y a un élément avec ID "Myelement", il peut être modifié comme ceci: document.getElementById('myElement').innerHTML = 'New content';
.
Vous pouvez modifier le style des éléments HTML à l'aide de l'attribut style
dans JavaScript. Cette propriété est un objet qui contient toutes les propriétés CSS de l'élément. Par exemple, s'il y a un élément avec ID "Myelement", il peut être modifié comme ceci: document.getElementById('myElement').style.color = 'red';
.
Vous pouvez ajouter de nouveaux éléments HTML à l'aide de la méthode createElement()
dans JavaScript. Cette méthode crée un nouvel élément, qui peut ensuite être attaché à un élément existant en utilisant la méthode appendChild()
. Par exemple, vous pouvez créer un nouveau paragraphe et l'ajouter au corps du document comme suit: var p = document.createElement('p'); document.body.appendChild(p);
.
L'attribut d'événement dans JavaScript est utilisé pour définir le code JavaScript à exécuter lorsqu'un événement spécifique se produit. Ces événements peuvent inclure de cliquer sur un bouton (onclick
), de charger une page (onload
) ou de déplacer la souris sur un élément (onmouseover
), etc. Le code de l'événement est défini directement dans les propriétés de l'élément HTML.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!