目录保存在 toc.ncx 文件
javascript
inputFile.addEventListener('change', function(e) {
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = function(e) {
const contents = e.target.result;
JSZip.loadAsync(contents).then(function(zip) {
zip.forEach(function(path, entry) {
if (!entry.dir) {
if (path.endsWith('.html') || path.endsWith('.xhtml')) {
......
} else if (path == 'toc.ncx') {
entry.async('string').then(function(content) {
genTOC(content);
}).catch(function() {
});
}
}
});
});
};
reader.readAsArrayBuffer(file);
});
解析ncx文件获取章节名称和地址
https://www.cnblogs.com/linlf03/archive/2011/12/13/2286047.html
src 保存到 option.dataset
javascript
function genTOC(content) {
select.innerHTML = '';
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(content, "text/xml");
var navPoint = xmlDoc.getElementsByTagName('navPoint');
for (i=0; i<navPoint.length; i++) {
var label = navPoint[i].getElementsByTagName('navLabel')[0].getElementsByTagName('text')[0].textContent;
var src = navPoint[i].getElementsByTagName('content')[0].getAttribute('src');
var option = document.createElement('option');
option.textContent = label;
option.dataset.src = src;
select.appendChild(option);
}
}
切换选项加载内容
src#分割,获取path和锚点,并跳转锚点。
javascript
select.addEventListener('change', function(e) {
var src = select.options[select.selectedIndex].dataset.src;
var srca = src.split('#');
viewer.innerHTML = map.get(srca[0]);
if (srca.length > 1)
window.location.hash = srca[1];
});