Tengo un archivo html, estoy agregando un elemento am dinámicamente, luego un rectángulo. Funciona bien en los diferentes navegadores (ignorando IE). Cuando trato de usar el mismo método para crear dinámicamente un elemento, no funciona en Chrome o Safari, solo en Opera. ¿Está mal mi sintaxis, o webkit probablemente no es compatible con agregar elementos en tiempo de ejecución? (el mismo elemento funciona bien si lo declaro como etiquetas iniciales). ¿Quizás se supone que no debo usar appendChild() con estos tipos de nodos? Esto es lo que tengo, deberías poder volcarlo en un archivo html y ejecutarlo. Si alguien tiene alguna idea de si hay una forma de evitar esto, sería genial:Agregando más elementos svg a mi documento en tiempo de ejecución
<html>
<head>
<script>
window.onload = function() {
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
svg.setAttribute('version', '1.1');
svg.setAttribute('width', '800px');
svg.setAttribute('height', '400px');
document.body.appendChild(svg);
var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
rect.setAttribute("id", "myrect");
rect.setAttribute("fill","red");
rect.setAttribute("stroke","black");
rect.setAttribute("stroke-width","5");
rect.setAttribute("x", "100");
rect.setAttribute("y", "100");
rect.setAttribute("width", "100");
rect.setAttribute("height", "50");
svg.appendChild(rect);
var anim = document.createElementNS('http://www.w3.org/2000/svg','animate');
anim.setAttribute("attributeName", "width");
anim.setAttribute("from", "100");
anim.setAttribute("to", "400");
anim.setAttribute("dur", "10s");
anim.setAttribute("begin", "0s");
anim.setAttribute("fill", "freeze");
rect.appendChild(anim);
}
</script>
</head>
<body>
</body>
Kyle, ¿cuál es el efecto de setAttributeNS (null, ...) vs setAttribute()? No estoy seguro de qué le hace al DOM, gracias. – user246114
desde: http://xmlgraphics.apache.org/batik/faq.html, "Sin embargo, es importante saber que algunas implementaciones hacen una diferencia entre setAttribute (x, y) y setAttributeNS (null, x, y), así que es una buena práctica usar setAttributeNS, que es la única manera interoperable garantizada de establecer atributos en una implementación de DOM que tenga en cuenta el espacio de nombres. " –
Ok gracias Kyle, iré con eso. – user246114