我正在尝试从OpenLayers地图上的ID中选择一个元素。我检查过元素ID是“ OpenLares_Map_4_Openlayers_Container ”,但数字有时会改变(4到8或10)。所以我试图用jQuery选择元素,选择器找到带有末尾的元素(see this link)。
但这似乎不起作用。可以在JSFiddle中看到示例,其中包含以下JavaScript代码:
// OSM
var osmLayer = new OpenLayers.Layer.OSM("OSM Map");
// Map
var map = new OpenLayers.Map('mapDiv', {
layers: [osmLayer],
center: new OpenLayers.LonLat(0, 0),
zoom: 0
});
// All elements
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
console.log('document.Elements: ' + i + ' -> ' + all[i].id)
}
// Select elements
var mapContainer = document.getElementById("OpenLayers_Map_4_OpenLayers_Container");
$("#tag1").text(" -> "+mapContainer);
console.log('mapContainer: ' + mapContainer);
var id_OL_Container = $("div[id$='_OpenLayers_Container']"); // http://api.jquery.com/attribute-ends-with-selector/
$("#tag2").text(" -> "+id_OL_Container);
console.log('id_OL_Container: ' + id_OL_Container);
有人知道jQuery的错误吗?
答案 0 :(得分:1)
重要课程:在潜水过深之前阅读API文档。您的整个解析逻辑可以替换为:
console.log('id_OL_Container: ' + map.layerContainerDiv.id);
这是一个有效的JSFiddle demonstrates it in action
另一个重要问题是为什么您认为您需要元素的ID。通过不依赖于元素ID名称,您可以使代码更加干净和可靠。您的OpenLayers代码不应与DOM级别代码混合,以允许独立进化。