2016-04-06 214 views
2

我在頁面中有一些tootip。有一個工具提示(div)包含一個輸入框和一個按鈕。我想單擊工具提示外部,然後隱藏工具提示。我嘗試這樣做:d3.js當點擊元素外部時,隱藏元素

d3.select("body") 
.on("click",function(){ 
    d3.select("#tooltip") 
    .classed("hidden",true); 
}); 

這個工作,但是當我點擊的輸入框中輸入某個值,則提示仍然隱藏。只有當我在工具提示外單擊時,我如何才能隱藏工具提示?

我也試過:

d3.select("body").filter().on("click",function(){}) 

但我不它是如何工作的,我不能選擇,除了工具提示(格)的所有元素。

回答

3

這裏是一個解決方案:

var tooltip = d3.select("#tooltip"); 
var tooltipWithContent = d3.selectAll("#tooltip, #tooltip *"); 

function equalToEventTarget() { 
    return this == d3.event.target; 
} 

d3.select("body").on("click",function(){ 
    var outside = tooltipWithContent.filter(equalToEventTarget).empty(); 
    if (outside) { 
     tooltip.classed("hidden", true); 
    } 
}); 

的jsfiddle:https://jsfiddle.net/LukaszWiktor/53yok58w/

+0

更新 - 我簡化了我的解決方案。 –

+0

謝謝!這真的起作用並解決了我的問題 – Yawei

+0

我們使用'd3.selectAll(「#tooltip *」)'可以選擇所有的子節點及其子節點。我想知道如何通過javascript選擇所有的子節點和他們的子節點?不是d3.js.使用'Node.childNodes()'只能選擇節點下的子節點,但不包含「子節點'子節點」。 – Yawei