这取决于你的意思。我没有从你的问题中全面了解发生了什么。从外观上看,您正在抓取一个 id 为“toc”的元素,所以我猜这个 toc 包含LI
元素和A
元素。在这种情况下,您可以在 中使用星号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';
}
}
}