按ID名称选择以OpenLayers

时间:2015-07-22 15:51:39

标签: jquery openlayers getelementbyid

我正在尝试从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的错误吗?

1 个答案:

答案 0 :(得分:1)

重要课程:在潜水过深之前阅读API文档。您的整个解析逻辑可以替换为:

console.log('id_OL_Container: ' + map.layerContainerDiv.id);

这是一个有效的JSFiddle demonstrates it in action

另一个重要问题是为什么您认为您需要元素的ID。通过不依赖于元素ID名称,您可以使代码更加干净和可靠。您的OpenLayers代码不应与DOM级别代码混合,以允许独立进化。