Это зависит от того, что вы имеете в виду. Я не получаю полную картину того, что происходит из вашего вопроса. Судя по всему, вы получаете элемент с идентификатором «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';
}
}
}