2017-02-28 63 views
0

我想寫一個函數,觀看一個元素,當徘徊或集中時,隱藏它的兄弟姐妹。關於懸停隱藏兄弟姐妹javascript

我寫這個

var hotSpotDiv = document.getElementsByClassName('custom-hotspot'); 
hotSpotDiv.addEventListener('mouseenter', function(e) { 
    this.classList.add('active'); 
}) 

hotSpotDiv.addEventListener('mouseleave', function(e) { 
    this.classList.remove('active'); 
}) 

哪些工作,但我堅持試圖想我怎麼能隱藏不具備active類懸停添加的元素。

+1

請原諒我問,但什麼特別的原因,你不想使用''CSS'做到這一點:hover'和兄弟('+')選擇? –

+1

沒關係 - 我現在看到你想隱藏所有的兄弟姐妹 - 我可以看到哪裏會有問題使用CSS。你可以添加你的標記嗎?這將有助於提供相關的CSS來回答你的問題。 –

+1

請注意,您顯示的代碼無法添加事件偵聽器,因爲'hotSpotDiv'是一個列表,並且沒有'.addEventListener()'方法。 – nnnnnn

回答

2

此代碼是...不是很好..我對你的場景做了一些推測,但它應該有希望給你一個很好的起點。

var hotSpotDivs = document.getElementsByClassName('custom-hotspot'); 
 
var i; 
 
function hotspotMouseEnter(e) { 
 
    this.classList.add('active'); 
 
    this.parentNode.classList.add('active'); 
 
} 
 

 
function hotspotMouseLeave(e) { 
 
    this.classList.remove('active'); 
 
    this.parentNode.classList.remove('active'); 
 
} 
 

 
for (i=0; i<hotSpotDivs.length; i++) { 
 
    hotSpotDivs[i].addEventListener('mouseenter', hotspotMouseEnter); 
 
    hotSpotDivs[i].addEventListener('mouseleave', hotspotMouseLeave); 
 
}
.the-container.active>.custom-hotspot { 
 
    visibility: hidden; 
 
} 
 

 
.the-container.active>.custom-hotspot.active { 
 
    visibility: visible; 
 
}
<div class="the-container"> 
 
\t <p class="custom-hotspot">hotspot 1</p> 
 
\t <p class="custom-hotspot">hotspot 2</p> 
 
\t <p class="custom-hotspot">hotspot 3</p> 
 
\t <p class="custom-hotspot">hotspot 4</p> 
 
\t <p class="custom-hotspot">hotspot 5</p> 
 
\t <p class="custom-hotspot">hotspot 6</p> 
 
</div>

+0

*「此代碼是...不是很好」* - 我認爲這是一個相當乾淨的解決方案。我正在考慮循環所有兄弟姐妹來單獨隱藏或展示他們,但是父母上的一堂課更加整潔。工作很好。 – nnnnnn

+0

@nnnnnn - 謝謝!在現實世界中,爲了效率的緣故,我可能會考慮委派事件監聽器,並且'this.parentNode'感覺有點脆弱,但是希望它給Brendan一些東西來建立:) –

+0

是的,對於DOM遍歷,我被使用到jQuery的'.closest()',以允許「父」元素可能在樹上高於文字父級。總是可以直接通過它的類或id直接選擇父類(如果它沒有像你的類一樣,則給它一個)。 – nnnnnn