2012-09-11 12 views
20

estoy tratando de manipular el atributo SVG 'viewBox', que es como la siguiente:¿Attr() en jQuery fuerza minúsculas?

<svg viewBox="0 0 100 200" width="100" ...> ... </svg> 

Usando

$("svg").attr("viewBox","..."); 

Sin embargo, esto crea un nuevo atributo en el elemento llamado "negatoscopio". Observe la minúscula en lugar de la prevista camelCase. ¿Hay alguna otra función que debería usar?

+3

http://bugs.jquery.com/ticket/11166 – j08691

+1

pregunta duplicado http://stackoverflow.com/questi ons/10390346/why-is-jquery-auto-lower-casing-attribute-values ​​ –

+0

Gracias, andres. Intenté buscar pero no encontré ese. – bzuillsmith

Respuesta

21

pude usar javascript puro para obtener el elemento y establecer el atributo utilizando

var svg = document.getElementsByTagName("svg")[0]; 

y

svg.setAttribute("viewBox","..."); 
-1

usted quiere asegurarse de que se quita el attr si ya existe antes de manipular que

$("svg").removeAttr("viewBox") 

y luego volver a crearlo

$("svg").attr("viewBox","..."); 
1

Usted podría utilizar ganchos de jQuery:

['preserveAspectRatio', 'viewBox'].forEach(function(k) { 
    $.attrHooks[k.toLowerCase()] = { 
    set: function(el, value) { 
     el.setAttribute(k, value); 
     return true; 
    }, 
    get: function(el) { 
     return el.getAttribute(k); 
    }, 
    }; 
}); 

Ahora jQuery se va a utilizar su setter/getters para manipular esos atributos.

Nota que el.attr('viewBox', null) habría fallado; su recolector de gancho no será llamado. En su lugar, debe usar el.removeAttr ('viewBox').

+0

Aunque este método funciona, no evita que ocurra el comportamiento anterior. Entonces, un elemento terminará con los atributos 'viewbox' y' viewBox'. No es que no funcione, pero no es tan limpio como podría ser. –

+1

Reparado. El colocador debería devolver 'verdadero' – Dinoboff

2

Por http://www.w3.org/TR/xhtml1/#h-4.2 "Los documentos XHTML deben usar minúsculas para todos los nombres de atributos y elementos HTML."

Así que con el fin de evitar que el atributo de convertir a minúsculas en un documento XHTML que necesita para crear el elemento que especifica un espacio de nombres utilizando document.createElementNS(), como:

var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); 
    svg.setAttribute('viewBox', '0 0 512 512’); 

Si va a añadir un elemento <use/> también deberá especificar el espacio de nombres al crear el elemento, así como el atributo xlink:href, como:

var use = document.createElementNS('http://www.w3.org/2000/svg','use'); 
    use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', '#your_svg_id'); 
Cuestiones relacionadas