2016-04-06 220 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