Получение атрибута id элемента svg динамически (Google SVG web) - PullRequest
0 голосов
/ 03 июля 2010

(используя http://code.google.com/p/svgweb/)

window.onsvgload = function() {
  function onEnter(e) {          
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;

    alert(targ.hasAttributeNS(null, 'id')); //displays false
    alert(targ.getAttributeNS(null, 'id')); //displays a blank dialog
    alert(targ.id); //displays a blank dialog
  }

  /* Seldom_Seen is a group element in the SVG - <g id="Seldom_Seen">... */
  document.getElementById('Seldom_Seen').addEventListener("mouseover", onEnter, false); //alert is blank
  document.getElementById('normal_dom_element').addEventListener("mouseover", onEnter, false); //alert displays id as expected
}

Прослушивание событий работает для элементов SVG. Я просто не могу получить удостоверение личности. Я могу получить другие свойства объекта, такие как значения x, y. В любом случае, чтобы получить идентификатор целевого элемента?

Ответы [ 2 ]

1 голос
/ 03 июля 2010

Вполне возможно, что вы получите другую цель, чем вы ожидаете.Все ли ваши элементы внутри элемента Seldom_Seen имеют идентификаторы?Вы всегда можете предупредить цель, чтобы увидеть, какой это тип элемента.

Есть некоторые ошибки с mouseover / mouseout для элементов <g>, события всплывают, и вы можете получить их дважды, если не выполните некоторую фильтрацию,См. слайды 17 и 18 здесь для возможного обходного пути.

1 голос
/ 03 июля 2010

возможно

e.currentTarget

но с jQuery это просто

window.onsvgload = function() {
  $('#Seldom_Seen').mouseover(function(){ onEnter(this); });
  $('#normal_dom_element').mouseover(function(){ onEnter(this); });
}

function onEnter(obj) {
  alert($(obj).attr("id"));
}
...