Клуб API Карт

Доступ к DOM-элементу на карте

Пост в архиве.

Можно ли как-то получить доступ к метке (Placemark) как к элементу DOM? Template для метки - это некоторый кусочек HTML, и я хочу в определённый момент менять класс у одного из элементов этого кусочка HTML.

Сейчас я это осуществляю заменой свойства style у метки (через setOptions), но прямой доступ к элементам был бы предпочтительнее.

7 комментариев
Можно класс определить в поле metaDataProperty и его использовать в шаблоне метки. Тогда для смены класса необходимо будет записать новое значение в поле и вызвать у метки метод update().

Можно создать свой оверлей и тогда будет прямой доступ к DOM-ноде.
Первый способ смысла не имеет, т.к. кусочек DOM всё-равно меняется. А я как раз хочу избавиться от "мигания" в этот момент.
Про второй покурю документацию, спасибо.
Есть метод getParentContainer(), возвращает указатель на родительский контейнер, а как получить указатель на сам маркер?
Сейчас этого сделать нельзя.
Мне подсказали другой способ. Надо реализовать собственный стиль меток вот так:

var LayoutTemplate = new YMaps.LayoutTemplate(function(context, map, owner){
                    var html = $('');
                    this._node;
                    var template = this;
                    this.onAddToParent = function(node) {
                        html.appendTo(node);
                    };
                    this.update = function() {};
                    this.getDOM = function() {
                         return html;
                    }
                    this.onRemoveFromParent = function() {}
                });
                YMaps.Templates.add("fotki#customPointIcon", LayoutTemplate);

                var s = new YMaps.Style();
                s.iconStyle = new YMaps.IconStyle("fotki#customPointIcon");
                s.iconStyle.offset = new YMaps.Point(0, 0);
                YMaps.Styles.add("fotki#customPoint", s);

Cоздав placemark с таким стилем, можно будет вызывать у него метод getDOM() .

new YMaps.Template('');


реализовал так :)

Доступ к DOM это не даёт