Установить переменную в другую переменную по id
Я работаю с Google Maps и пытаюсь создать боковую панель, которая позволяет использовать различные наложения KML. Я поместил слои KML в переменные с идентичным тегом ID кнопки, которую нужно нажать, чтобы активировать их, в надежде вызвать этот идентификатор в качестве переменной, которую затем можно использовать в функции setMap.
Не уверен, возможно ли это на самом деле
В этом скрипте я пытаюсь сделать так, чтобы вы нажимали элемент с тегом ID 'kml1', устанавливали testvar='kml1', а затем могли поместить testvar.setMap(the_Map) вместо kml1.setMap(the_Map), как тествар == кмл1
JQuery
kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
preserveViewport: true,
});
kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
preserveViewport: true,
});
$(document).ready(function() {
$('.kml_item').toggle(
function() {
for (i=0; i<50; i++) {
testvar = this.id
if (testvar == 'kml' + i) {
testvar.setMap(the_Map);
break;
}
}
},
function() {
for (i=0; i<50; i++) {
testvar = this.id
if (testvar == 'kml' + i) {
testvar.setMap(null);
break;
}
}
);
})
связанный HTML
<div id="kml1" class="kml_item">KML 1</div>
<div id="kml2" class="kml_item">KML 2</div>
3 ответа
Не уверен, что это действительно кошерный ответ на ваш собственный вопрос на этом сайте, но я нашел другой метод, хотя я считаю, что моя первоначальная проблема использования тега ID в качестве переменной неразрешима, как я к ней подходил. Вместо каждого слоя KML в отдельной переменной я собираю их в массив. Предоставление кликабельным элементам div для тега заголовка позволяет функции подсчитывать до тех пор, пока элемент массива не совпадет с номером заголовка для div и не поместит этот элемент из массива на карту.
Массив KML
kml_arr = [
new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
preserveViewport: true,
}),
new google.maps.KmlLayer("http://www.domain.com/map_overlay2.txt", {
preserveViewport: true,
})
]
JQuery
$(document).ready(function() {
$('.kml_item').toggle(
function() {
$(this).animate({backgroundColor: '#ffffff'}, 200);
for (i=0; i<50; i++) {
if (i == this.title) {
kml_arr[i].setMap(the_Map);
break;
}
}
},
function() {
$(this).animate({backgroundColor: '#d0d0d0'}, 200);
for (i=0; i<50; i++) {
if (i == this.title) {
kml_arr[i].setMap(null);
break;
}
}
}
);
})
связанный HTML
<div title="0" id="kml1" class="kml_item">KML 1</div>
<div title="1" id="kml2" class="kml_item">KML 2</div>
Попробуй .click()
функция
$('#kml1').click(function(){
new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
preserveViewport: true,
});
});
Я думаю, что вы можете получить то, что вы ищете, с помощью нескольких настроек.
// These kml objects will be attached to the global window object at
// window.kml1
// or
// window['kml1']
var kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
preserveViewport: true,
});
var kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
preserveViewport: true,
});
$(document).ready(function() {
$('.kml_item').click(function() {
// Access the various kml objects and set the_Map
var kml = window[this.id]
if(kml.getMap()) {
kml.setMap(null);
}
else {
kml.setMap(the_Map);
}
});
});