Ваш идентификатор содержит специальные символы (в частности, точку). См. документацию :
Если идентификатор содержит символы, такие как точки или двоеточия, вы должны экранировать эти символы с обратной косой чертой.
(Это потому, что .
будет интерпретироваться как селектор класса: #42.123456
означает выбор элементов с идентификатором 42
и классом 123456
, например.)
Кроме того, он начинается с числа, которое технически недопустимо (см. пункт 6.2 здесь ):
Жетоны ID и NAME должны начинаться с буквы ([A-Za-z]) и могут сопровождаться любым количеством букв, цифры ([0-9]), дефисы ("-"), подчеркивания ("_"), двоеточия (":") и точки (".")
... однако , он по-прежнему работает во всех браузерах, которые я тестировал.
У вас есть несколько вариантов:
- Вы можете избежать точки с обратной косой чертой:
$('#' + e.latlng.lat.toString().replace('.', '\\.')).remove()
- Вы можете запросить
[id="..."]
вместо: $('[id="' + e.latlng.lat + '"]').remove()
- Вы можете использовать
document.getElementById
: $(document.getElementById(e.latlng.lat)).remove()
.
По моему мнению, значение, подобное этому, не должно быть идентификатором в любом случае, я бы использовал вместо атрибута или просто сохраните ссылку на элемент напрямую:
var $element = $('<div><label>test:</label><input type="hidden" name="map_coords" value="' + e.latlng.lat + '|' + e.latlng.lng + '"/></div>');
$('#map').append($element);
var marker = L.marker([e.latlng.lat, e.latlng.lng]).addTo(mymap);
marker.on('click',function(e) {
$element.remove();
this.remove();
});
Обратите внимание, что я также обернул элементы в <div>
здесь! На самом деле, без этого он бы вообще не работал, так как удаляемый элемент был бы только <input>
, а не <label>
.