D3.js 传单和D3js:Feature.properties未显示在传单弹出窗口中

D3.js 传单和D3js:Feature.properties未显示在传单弹出窗口中,d3.js,leaflet,mapbox,D3.js,Leaflet,Mapbox,如何在弹出窗口中的D3图表下添加功能属性? 我得到了弹出窗口和图表,但我似乎无法添加图表下方的feature.properties 以下是我的geoJSON数据示例: 这是我的弹出代码: var popup=L.popup({minWidth:600}).setContent(div); layer.bindPopup(popup+''+feature.properties.NAME); 这是我的测试。如您所见,弹出窗口正在工作,但无法获取要在图表下显示的功能属性 感谢您的帮助……我发现了多个

如何在弹出窗口中的D3图表下添加功能属性?

我得到了弹出窗口和图表,但我似乎无法添加图表下方的feature.properties

以下是我的geoJSON数据示例:

这是我的弹出代码:

var popup=L.popup({minWidth:600}).setContent(div);
layer.bindPopup(popup+'
'+feature.properties.NAME);
这是我的测试。如您所见,弹出窗口正在工作,但无法获取要在图表下显示的功能属性


感谢您的帮助……

我发现了多个可能的问题

您正在打开一个
元素,但没有关闭它。如果您添加这样的文本,它将被“吞没”,并在呈现的
中结束,但d3绘制的图表将隐藏它:

// won't show the text
var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg>here is some text</div>')[0];
因为这个
L.popup
是一个对象,所以不能简单地将文本连接到它。结果如下:
“[object object]这里有一些文本”

然后您将使用
feature.properties.NAME
,这将不起作用,因为您的GeoJSON属性的键名为
NAME
(请注意大写)-请改用:
feature.properties.NAME


总之,要解决您的问题,请将
onEachFeature\u LMA
函数中的一行
var div=…
更改为:

var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg/><br/>'+feature.properties.Name+'</div>')[0];
var div=$('
'+feature.properties.Name+'')[0];

由于您使用的是jQuery,如果您想添加更多的图形、其他HTML元素,您也可以像下面这样构建弹出窗口的HTML:

  var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg/></div>')[0];
  var div2 = $('<div></div>').html(feature.properties.Name);
  $(div).append($(div2));
var div=$('')[0];
var div2=$('').html(feature.properties.Name);
$(div).追加($(div2));

谢谢您的评论。我来看看。但是,对于SVG元素……如果在浏览器检查器中检查代码,则会有一个SVG结束标记。不是这样吗?@redshift是和否,也许甚至d3图书馆也会这么做,我不确定。因此,当使用“inspect”函数时,您将看到浏览器的解释版或固定版代码,它不一定是您最初编写的源代码。谢谢,我能够在我的JSFIDLE中使用它!然而,在我的网站上,条形图下有一个“未定义”的文本。两个站点上的代码看起来都一样,所以我必须进行故障排除。你发现了什么吗?:@redshift看看你的json文件,没有“Name”属性,
{“type”:“Feature”,“properties”:{“FID”:1,“OBJECTID”:135,“PROV_34_NA”:“Nangarhar”,“DIST_34_NA”:“Deh Bala”,“DISTID”:808,“PROVID”:8}
--使用
功能.properties.PROV_34_NA
功能.properties.DIST_34_NA
:我想我的数据导出在过程中损坏了。谢谢!我会将此标记为已解决!
var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg/><br/>here is some text</div>')[0];
layer.bindPopup(popup + 'here is some text');
var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg/><br/>'+feature.properties.Name+'</div>')[0];
  var div = $('<div id="chart" style="width: 600px; height: 400px;"><svg/></div>')[0];
  var div2 = $('<div></div>').html(feature.properties.Name);
  $(div).append($(div2));