d3在鼠标悬停上过滤数据之后从选择中提取值
d3 extracting values from selection after filtering data on mouseover
我为这个奇怪的标题道歉,描述我的问题并不容易,希望其他需要解决同一问题的人最终会出现在这里。我在地图上有一些记号笔;它们的x,y位置是由一些设备ips提供的long,lat产生的,所以一些标记重叠,因为它们具有精确的x,y值。我正在尝试创建一个工具提示,悬停时,将显示所有重叠标记的名称。这就是我目前所处的位置。
样本数据集:
dataset= [
{long: -75, lat: 43, name: 'name1'},
{long: -75, lat: 43, name: 'name2'}
]
tooltip=d3.select('body').append('div')
markers=d3.selecltAll('.marker').data(dataset).enter().append()
.attr('class', 'marker')
.on('mousemove', (d)->
myv=[]
vals=projection([d.long, d.lat])
d3.selectAll('.marker').filter((d,i) ->
proj = projection([d.long, d.lat])
proj[0] < (vals[0]+5) && proj[0] > (vals[0]-5) && proj[1] < (vals[1]+5) && proj[1] > (vals[1]-5)
).text (d) ->
myv.push(d.name)
)
以下是我的问题,
1) 使用text函数在myv数据集中推送d.name是可行的,但感觉不对。在过去的几个小时里,我一直在尝试以一种更干净的方式推动它,但无法做到。我尝试使用datum(d)->myv.push(d.name),由于某种原因,它只在第一次悬停时工作一次。
2) 既然我有了数据集myv
,我该如何在工具提示中显示它?
3) 有没有更好/更干净的方法来实现我想要做的事情?
提前感谢您抽出时间!
关于(1),您可以使用.each
为选择中的每个数据运行一次函数:
d3.selectAll('.marker')
.filter(...)
.each(function(d) { myv.push(d.name); });
在工具提示中显示名称需要进行单独选择,然后使用myv
数组作为数据集。
tooltip.selectAll(".name")
.data(myv)
// do stuff
相关文章:
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- j查询提取禁用选择选项值
- 我正在尝试从 xhtml 文件中动态提取所有
元素,并使用 javascript 将它们放入选择列表中
- d3在鼠标悬停上过滤数据之后从选择中提取值
- 在使用java使用dropbox选择器从dropbox中提取文件后,如何将文件存储在服务器中
- 如何在选择项目时使用 ajax 将数据提取到输入字段中
- JQuery:如何将文本区域的内容选择为html字符串并从中提取文本
- Ajax,PHP,Javascript在组合框选择后从数据库中提取值
- 如何使用 jQuery 提取作为 AJAX 响应接收的 JSON 数据并将其添加到 HTML 选择下拉列表中
- Codeigniter/jQuery:将值从选择下拉列表提取到数据表中时出现问题
- Web Sql 选择语句无法提取第三列
- 从属性选择器中提取值
- Javascript选择的项值未正确提取
- 是否可以提取用户选择的pdf文本
- 解析JSON数组并提取选择列表ID和Value的值
- 如何解析和提取CSS选择器作为字符串
- underscore.js: _.选择此选项可提取位于数组中的对象中的属性
- 我将如何提取月和年从月年选择器,我使用jquery
- 提取选择列表的值并使用它来搜索ID值会导致所有剩余的JavaScript失效
- 如何从 CSS 选择器中提取类名