2017-01-09 22 views
2

我正在製作完整的JavaScript菜單。無法爲所選的顏色着色<a>標記

我試圖根據用戶的offsetTop改變<li><a>項目的顏色。問我這是不是可以理解的。

菜單

var menu = document.getElementById('header'); 
var work = document.getElementById('work'); 
var who = document.getElementById('who'); 
var contact = document.getElementById('contact'); 
var offsetWork = work.offsetTop - 60; 
var offsetWho = who.offsetTop - 60; 
var offsetContact = contact.offsetTop - 60; 
var ul = document.getElementsByTagName('ul')[0]; 
var li = ul.getElementsByTagName('li'); 

setInterval(function(){ 
    var ul = document.getElementsByTagName('ul')[0]; 
    var li = ul.getElementsByTagName('li'); 

    if(getCurrPos() >= offsetWork){ 
     menu.style.display = "block"; 
    }else if(getCurrPos() <= offsetWork){ 
     menu.style.display = "none"; 
    } 

    if(offsetWork <= getCurrPos() <= offsetWho){ 
     li[1].style.backgroundColor = '#00a9c6'; 
     //li[1].getElementsByTagName('a').style.color = '#fff'; 
    }else { 
     li[1].style.backgroundColor = '#fff'; 
    } 

    if(offsetWho <= getCurrPos() <= offsetContact){ 
     li[2].style.backgroundColor = '#00a9c6'; 
     //li[2].getElementsByTagName('a').style.color = '#fff'; 
    }else { 
     li[2].style.backgroundColor = '#fff'; 
    } 

    if(getCurrPos() >= offsetContact){ 
     li[3].style.backgroundColor = '#00a9c6'; 
     //li[3].getElementsByTagName('a').style.color = '#fff'; 
    }else { 
     li[3].style.backgroundColor = '#fff'; 
    } 

}, 100); 

所有註釋行不工作,我不知道爲什麼,因爲它是在做李當發現[A]項[1] .getElementsByTagName(「A」) ;

謝謝你的幫助,

Maël。

+3

嘗試更換'.getElementsByTagName( 'A')style.color = '#FFF';與''.getElementsByTagName( 'a')的[0] .style.color ='#fff ';'記住'getElementsByTagName('a')'返回一個NodeList對象,表示一個錨元素的集合。 – NewToJS

+0

可能的重複[什麼做querySelectorAll,getElementsByClassName和其他getElementsBy \ *方法返回?](http://stackoverflow.com/questions/10693845/what-do-queryselectorall-getelementsbyclassname-and-other-getelementsby-method) – ValLeNain

+0

謝謝很多NewToJS,我用它上李但不上了,我的壞啊! –

回答

0

使用

li[3].querySelector('a').style.color = '#fff'; 

querySelector返回由選擇

選擇的所有元素內的第一個元素的getElementsByTagName返回選擇器匹配,因此不能用的語法等訪問該元素的所有元素的集合利[2] .getElementsByTagName( 'A')style.color

+0

謝謝你的提示!我很新的JS :) –