如何在OpenLayers中获取所选function的Event或DOM元素

我正在实现一个OpenLayers SelectFeature控件,并试图将JQuery UI对话框小部件放在所选function的顶部。 要使用JQuery UI Position实用程序,它需要DOM元素或Event。

SelectFeature控件的onSelect回调为我提供了一个表示所选特征的OpenLayers.Feature.Vector对象。 从这里,我如何获得所选function的DOM元素或click事件的Event对象?

var selectControl = new OpenLayers.Control.SelectFeature(clientsLayer, { hover : false, clickout: false, multiple: false, onSelect: function(feature) { // how do I get the DOM element of the feature // or alternately, the click event of the selection? } }); 

你做得对。

如果你做一个console.log(feature)你会看到它返回一个CLASS_NAME =“OpenLayers.Feature.Vector”的对象

 onSelect: function(feature) { console.log(feature); } 

更新:

我知道了。 您可以添加事件侦听器

 var selectControl = new OpenLayers.Control.SelectFeature(clientsLayer, { hover: false, clickout: false, multiple: false, eventListeners: { featurehighlighted: function (event) { console.log(event); console.log(event.feature); } } }); 

这是你想要的吗?

 onSelect: function onFeatureSelect(event) { var feature = event.feature; if ( feature.layer.name == 'theone') { ... } } 

注意我也在“ 如何从openlayers矢量function中获取DOM元素”中发布了此答案

如果要在hover上找到鼠标或function的位置,以便显示自定义覆盖,请创建自定义hover控件并定义function突出显示的function,如下所示:

 var featureHoverControl = new OpenLayers.Control.SelectFeature([myLayer], { id: 'featureHoverControl', hover: true, autoActivate: true, highlightOnly: true, renderIntent: "temporary", eventListeners: { featurehighlighted: function(e) { // either use the mouse's position when the event was triggered var mouseXPosition = this.handlers.feature.evt.x; var mouseYPosition = this.handlers.feature.evt.y; // or retrieve the feature's center point var featureCenterLonLat = e.feature.geometry.bounds.getCenterLonLat(); var featureCenterPoint = map.getPixelFromLonLat(featureCenterLonLat); // display your custom popup here // eg showTooltip(e.feature.attributes.name, featureCenterPoint.x, featureCenterPoint.y) } , featureunhighlighted: function(e) { // hide your custom popup here // eg hideTooltip() } } }); map.addControl(featureHoverControl); 

如果您需要访问代表您的图层/function的SVG元素(如果您使用的是第三方库而您不想修改源代码),请使用以下任一行(取决于您是否需要图层或特征):

 var layerElement = map.getLayersByName("My Layer")[0].features.root; var layerElementId = map.getLayersByName("My Layer")[0].features.root.id; var featureElementId = map.getLayersByName("My Layer")[0].getFeaturesByAttribute("name","My Feature Name")[0].geometry.components[0].id; 

请注意,由于这只会抓取元素的id,因此您仍需要使用适当的方法来获取对元素本身的引用。 像下列之一:

 var elementReference1 = document.getElementById(featureElementId); var elementReference2 = jQuery('#'+featureElementId)[0];