Javascript 如何从本地存储和传单上的图层组中删除特定项目?
我试图将我在点击传单时创建的标记保存在localstorage上,并使用按钮将其删除。问题是,我不知道如何一次只删除一个标记,并在不影响其他标记的情况下将其从主层中删除 我想为创建的每个标记添加一个唯一的id(这就是为什么“marker#”)然后删除,看看当前标记的id或位置(lat,lng)是否与localstorage上存储的id或位置匹配,然后将其从localstorage中删除并从主层中删除 有人能帮我解决这个问题吗?这让我头疼 我正在使用此函数将它们添加到地图和本地存储中:Javascript 如何从本地存储和传单上的图层组中删除特定项目?,javascript,local-storage,leaflet,markers,Javascript,Local Storage,Leaflet,Markers,我试图将我在点击传单时创建的标记保存在localstorage上,并使用按钮将其删除。问题是,我不知道如何一次只删除一个标记,并在不影响其他标记的情况下将其从主层中删除 我想为创建的每个标记添加一个唯一的id(这就是为什么“marker#”)然后删除,看看当前标记的id或位置(lat,lng)是否与localstorage上存储的id或位置匹配,然后将其从localstorage中删除并从主层中删除 有人能帮我解决这个问题吗?这让我头疼 我正在使用此函数将它们添加到地图和本地存储中: initU
initUserLayerGroup();
map.on('click', onMapClick);
var groupUser;
function initUserLayerGroup() {
if (localStorage.userMarkers !== undefined) {
var storageMarkers = [];
var markersUser = [];
storageMarkers = JSON.parse(localStorage.userMarkers);
for (var i = 0; i < storageMarkers.length; i++) {
var x = storageMarkers[i].coords.x;
var y = storageMarkers[i].coords.y;
var name = storageMarkers[i].name;
var marker = L.marker([y, x]).bindPopup(name + "<br><a href='#' class='delete'>Delete</a>");
marker.on("popupopen", onPopupOpen);
markersUser.push(marker);
}
groupUser = L.layerGroup(markersUser);
map.addLayer(groupUser);
}
}
function onMapClick(e) {
var storageMarkers = [];
var markersUser = [];
if (localStorage.userMarkers !== undefined) {
storageMarkers = JSON.parse(localStorage.userMarkers);
}
storageMarkers.push({
"coords": {
"x": e.latlng.lng,
"y": e.latlng.lat
},
"name": "Marker #"
});
var x = storageMarkers[storageMarkers.length -1].coords.x;
var y = storageMarkers[storageMarkers.length -1].coords.y;
var name = storageMarkers[storageMarkers.length -1].name;
var marker = L.marker([y, x]).bindPopup(name + "<br>X: "+ x +", Y: "+ y +"<br><a href='#' class='delete'>Delete</a>");
marker.on("popupopen", onPopupOpen);
markersUser.push(marker);
groupUser = L.layerGroup(markersUser);
map.addLayer(groupUser);
localStorage.userMarkers = JSON.stringify(storageMarkers);
}
function onPopupOpen() {
var tempMarker = this.getLatLng();
$('.delete').click(function() {
localStorage.removeItem('userMarkers');
map.removeLayer(groupUser);
});
}
initUserLayerGroup();
map.on('click',onmaclick);
var-groupUser;
函数initUserLayerGroup(){
if(localStorage.userMarkers!==未定义){
var-storageMarkers=[];
var markersUser=[];
storageMarkers=JSON.parse(localStorage.userMarkers);
对于(var i=0;i”);
marker.on(“popupopen”,onPopupOpen);
markersUser.push(标记器);
}
groupUser=L.layerGroup(markersUser);
map.addLayer(groupUser);
}
}
函数onMapClick(e){
var-storageMarkers=[];
var markersUser=[];
if(localStorage.userMarkers!==未定义){
storageMarkers=JSON.parse(localStorage.userMarkers);
}
推({
“coords”:{
“x”:e.latlng.lng,
“y”:e.latlng.lat
},
“名称”:“标记#”
});
var x=storageMarkers[storageMarkers.length-1].coords.x;
var y=storageMarkers[storageMarkers.length-1].coords.y;
var name=storageMarkers[storageMarkers.length-1].name;
var marker=L.marker([y,x]).bindpoop(名称+”
x:“+x+”,y:“+y+”
”;
marker.on(“popupopen”,onPopupOpen);
markersUser.push(标记器);
groupUser=L.layerGroup(markersUser);
map.addLayer(groupUser);
localStorage.userMarkers=JSON.stringify(storageMarkers);
}
函数onPopupOpen(){
var tempMarker=this.getLatLng();
$('.delete')。单击(函数(){
localStorage.removietem('userMarkers');
map.removeLayer(groupUser);
});
}
您可以看到它在这里工作:
一种方法是在单击标记时,在
localStorage
中迭代保存的坐标数组,并将其与单击的标记的坐标进行比较。一旦它们相同,从localSotrage
中删除此项目并进行更新
function onPopupOpen() {
var _this = this;
var clickedMarkerCoords = this.getLatLng();
$('.delete').click(function() {
storageMarkers = JSON.parse(localStorage.userMarkers);
for(i = storageMarkers.length; i > 0; i--) {
if (typeof storageMarkers[i] != 'undefined' &&
(clickedMarkerCoords.lat == storageMarkers[i].coords.y &&
clickedMarkerCoords.lng == storageMarkers[i].coords.x)
) {
storageMarkers.splice(i, 1);
localStorage.userMarkers = JSON.stringify(storageMarkers);
}
}
map.removeLayer(_this);
});
}
这是我要找的东西:非常感谢拉扎雷夫·亚历山大,这正是我要找的。一种迭代保存的数组并比较它们的方法!你真棒!