从 GeoJSON 数据中为 div 分配 ID
Assigning ID to div from GeoJSON data
我有一些分配给 id 的 GeoJSON 数据,如下所示:
此数据的坐标值用于在 LeafletJS 中创建标记。我试图像这样将 id 分配给每个标记:
layer.markerID = feature.properties.id;
但是,我想将 GeoJSON 中的相同 id 分配给 div,最终将显示数据的其他方面,例如 "firstname" 和 "lastname." 这样,div id 和标记 id 将链接在一起,具体取决于单击的标记。因此,如果单击 id 为 99 的标记,则 div 中的数据(其 id 为 99)将对应于该标记。这个想法是这些id是动态生成的
我只是不太确定如何解决这个问题。任何帮助将不胜感激!
编辑:只是添加了一些额外的代码。以下是我如何为我的地图创建标记:
$.getJSON("json.php", function(json) {
var testlayer = L.geoJson(json, {
style: function (feature) {
return feature.properties.style;
},
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname);
}
})
您应该可以在 onEachFeature
函数中设置点击监听器。
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname);
layer.on({ click: whenClicked });
}
然后有一个在点击时被调用的函数:
function whenClicked(e) {
// e = event
console.log(e);
}
查看事件对象内部,它应该为您提供功能。
所以我终于弄明白了。这是我想出的办法,以防其他人遇到此问题。
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname + "<br>" + "<strong>Location Details:</strong>" + " " + feature.properties.locationDetails);
layer.on({ click: slideData });
function slideData(e){
document.getElementById("box1").setAttribute("id", feature.properties.id);
document.getElementsByClassName("fullName")[0].innerHTML = feature.properties.firstname + " " + feature.properties.lastname;
document.getElementById("ageNumber").innerHTML = feature.properties.age;
}
通过将所有内容保持在同一个函数中,我能够访问 JSON 并使用 document.getElementById 和 document.getElementsByClassName 方法将文本放入我想要的区域通缉。 :)
另外,感谢@Hinrich 的帮助!您的建议确实帮助我思考了问题并找到了解决方案。
我有一些分配给 id 的 GeoJSON 数据,如下所示:
此数据的坐标值用于在 LeafletJS 中创建标记。我试图像这样将 id 分配给每个标记:
layer.markerID = feature.properties.id;
但是,我想将 GeoJSON 中的相同 id 分配给 div,最终将显示数据的其他方面,例如 "firstname" 和 "lastname." 这样,div id 和标记 id 将链接在一起,具体取决于单击的标记。因此,如果单击 id 为 99 的标记,则 div 中的数据(其 id 为 99)将对应于该标记。这个想法是这些id是动态生成的
我只是不太确定如何解决这个问题。任何帮助将不胜感激!
编辑:只是添加了一些额外的代码。以下是我如何为我的地图创建标记:
$.getJSON("json.php", function(json) {
var testlayer = L.geoJson(json, {
style: function (feature) {
return feature.properties.style;
},
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname);
}
})
您应该可以在 onEachFeature
函数中设置点击监听器。
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname);
layer.on({ click: whenClicked });
}
然后有一个在点击时被调用的函数:
function whenClicked(e) {
// e = event
console.log(e);
}
查看事件对象内部,它应该为您提供功能。
所以我终于弄明白了。这是我想出的办法,以防其他人遇到此问题。
onEachFeature: function (feature, layer) {
layer.markerID = feature.properties.id;
layer.bindPopup("<strong>ID:</strong> " + feature.properties.id + "<br>" + "<strong>Name:</strong> " + feature.properties.firstname + " " + feature.properties.lastname + "<br>" + "<strong>Location Details:</strong>" + " " + feature.properties.locationDetails);
layer.on({ click: slideData });
function slideData(e){
document.getElementById("box1").setAttribute("id", feature.properties.id);
document.getElementsByClassName("fullName")[0].innerHTML = feature.properties.firstname + " " + feature.properties.lastname;
document.getElementById("ageNumber").innerHTML = feature.properties.age;
}
通过将所有内容保持在同一个函数中,我能够访问 JSON 并使用 document.getElementById 和 document.getElementsByClassName 方法将文本放入我想要的区域通缉。 :)
另外,感谢@Hinrich 的帮助!您的建议确实帮助我思考了问题并找到了解决方案。