2011-02-19 9 views
7

consideran este SVG/XML y JavaScript:manera correcta para obtener el valor del atributo de declaración de espacio de nombres

<svg id="foo" xmlns="http://www.w3.org/2000/svg" 
       xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <use id="bar" xlink:href="#whee" /> 
</svg> 
... 
var foo = document.getElementById('foo'); 
var bar = document.getElementById('bar'); 
var xlnk = foo...; // What is correct here? 
var link = bar.getAttributeNS(xlnk,'href'); 

Está claro que puede hacer este trabajo con xlnk = "http://www.w3.org/1999/xlink"; mi pregunta, sin embargo, es ¿cuál es la forma correcta de obtener dinámicamente el atributo xmlns:xlink en el elemento svg?

El siguiente código funciona en Safari/Chrome/FF, pero, ¿es realmente válido?
var xlnk = foo.getAttribute('xmlns:xlink');

El código siguiente devuelve una cadena vacía en esos navegadores:
var xlnk = foo.getAttributeNS("http://www.w3.org/2000/svg", "xlink");

Respuesta

5

La especificación getAttributeNS() documenta el segundo parámetro como:

"El local name del atributo a obtener."

Per Namespaces in XML, 3rd Edition la xmlns prefijo es reserved y se utiliza como parte de la PrefixedAttName para definir un NSAttName.

Desde un NSAttName no tiene una "parte local", y un QName hace-parece que xmlns:xlink no se considera un espacio de nombre + nombre local, sino que es el propio nombre del atributo. Como esto es coherente con los resultados experimentales en navegadores que cumplen con los estándares normalmente, estoy convencido de que el siguiente código es válido y correcto:

var xlnk = foo.getAttribute('xmlns:xlink'); 
Cuestiones relacionadas