JSFiddle - React, Tailwind, and code Playground
HTML
<div class="expounder-example">
<p>
東京は、江戸幕府の所在地の<span data-expounder="edo">江戸</span><span data-expounded="edo">(※江戸は、日本の首都東京の旧称であり、1603年から1867年まで江戸幕府が置かれていた都市である。)</span>を1868年9月に改称したものである。 </p>
<p>
「東京」という名称を用いる構想は江戸時代後期の佐藤信淵の書にあり、大久保利通がその書の影響を受けつつ「東京」とすることを建言した。</p>
<p>
1869年2月11日1878年(明治11年)に府制を施行、「<span data-expounder="tokyo-fu">東京府</span>」<span data-expounded="tokyo-fu">(※東京府(とうきょうふ/とうけいふ)は、1868年(慶応4年、明治元年)から1943年(昭和18年)までの間に存在していた日本の府県の一つであった。現在の東京都の前身に当たる。)</span>となった。</p>
<p>1878年(明治11年)・1880年(明治13年)に伊豆諸島・小笠原諸島を編入。</p>
<p>1889年(明治22年)5月1日には、<span data-expounder="tokyo-15ku">東京15区</span><span data-expounded="tokyo-15ku">(※1932年(昭和7年)に東京市が周辺町村を合併して「大東京市」を構成する以前の、いわゆる旧市域に含まれる15区を指す。その内訳は、麹町区、神田区、日本橋区、京橋区、芝区、麻布区、赤坂区、四谷区、牛込区、小石川区、本郷区、下谷区、浅草区、本所区、深川区である。)</span>を東京府から分立して東京市とした。</p>
</div>
CSS
*[data-expounder] {
text-decoration: none;
border-bottom: 1px dashed;
cursor: pointer;
}
@keyframes expoundedFadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
*[data-expounded] {
display: none;
}
*[data-expounded].expounded-appear {
display: initial;
animation: expoundedFadeIn 1s;
font-size:12px;
color:red;
}
div{width:100%;}
p{width:80%;margin-bottom:15px;margin-left:auto;margin-right:auto;}
a,
*[data-expounder] {
transition: color .25s ease-in;
color: blue;
}
JavaScript
//Copyright (c) 2016 Stavros Korokithakis
//by https://github.com/skorokithakis/expounder
;
(function(global) {
'use strict';
var Expounder;
function expounderFactory() {
document.addEventListener('DOMContentLoaded', function() {
var elements = document.querySelectorAll('span[data-expounder]');
for (var index = 0; index < elements.length; index++) {
elements[index].addEventListener('click', function(event) {
event.preventDefault();
var expoundId = this.dataset.expounder;
var expounded = document.querySelector('*[data-expounded="' + expoundId + '"]');
var parentNode = this.parentNode;
var textNode = document.createTextNode(this.textContent);
parentNode.replaceChild(textNode, this);
expounded.className = "expounded-appear";
}, false);
}
}, false);
}
// Export
Expounder = expounderFactory();
// AMD
if (typeof define === 'function' && define.amd) {
define(function() {
return Expounder;
});
// Node and other CommonJS-like environments that support module.exports
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = Expounder;
// Browser
} else {
global.Expounder = Expounder;
}
})(this);