それはあなたが何を意味するかに依存します。私はあなたの質問から何が起こっているのかを完全に把握していません。その外観から、あなたは "toc"のidを持つ要素をつかんでいます。だから、このtocには、A
要素だけでなく、LI
要素も含まれていると推測しています。この場合、getElementsByTagName
にアスタリスクを使用できます。他の要素の数によっては遅くなる可能性があります。
function setActive() {
var href = window.location + ''
, el = document.getElementById('toc')
, a = el.getElementsByTagName('*')
, i = 0
, l = a.length
, name;
for (; i < l; i++) {
el = a[i];
name = el.nodeName.toLowerCase();
if (name === 'li' || (name === 'a'
&& ~href.indexOf(el.href))) {
el.className = 'active';
}
}
}
あなたが高いドキュメントツリー内のアップ先祖のLIを求めているなら、これはあなたが望むものを です:
function setActive() {
var href = window.location + ''
, el = document.getElementById('toc')
, a = el.getElementsByTagName('a')
, i = 0
, l = a.length;
// descendants
for (; i < l; i++) {
if (~href.indexOf(a[i].href)) {
a[i].className = 'active';
}
}
// parents
while (el = el.parentNode) {
if (el.nodeName.toLowerCase() === 'li') {
el.className = 'active';
}
}
}