2012-04-30 14 views
22

estoy trabajando con un SVG que se coloca directamente en un archivo HTML¿Por qué es jQuery los valores de atributo de la carcasa inferior automática?

<svg> 
    Contents... 
</svg> 

uso de JavaScript/jQuery Quiero añadir un atributo al SVG

$("svg").attr("viewBox", "0 0 166 361"); 

Aquí está el SVG modificado después de correr el script anterior

<svg viewbox="0 0 166 361"> 
    Contents... 
</svg> 

note que pone viewbox not viewBox. Dado que viewbox (minúsculas) no hace nada, necesito que sea viewBox (camelcase)

¿Alguna idea?

** Actualización **

hice una pequeña prueba en la que dictó el atributo viewBox desde el lado del servidor, entonces me encontré con el guión anterior. Puede ver que 1. Cuando se representa desde el lado del servidor, está bien. 2. jQuery no reconoció el atributo camelCase viewBox e insertó otro en minúsculas.

<svg version="1.1" id="Layer_1" x="0pt" y="0pt" width="332" 
    height="722" viewBox=" 0 0 100 100" viewbox="0 0 166 332"> 
... 
</svg> 

Respuesta

21

Depende del tipo de documento de codificación. XHTML documents must use lower case for all HTML element and attribute names. No estoy seguro de HTML.

Actualización 2

La única solución que pude encontrar es utilizar:

$("svg")[0].setAttribute("viewBox", "0 0 166 361"); 

actualización

No puedo explicarlo por cualquier razón, he probado en mi propio host porque JsFiddle siempre usa XHTML (boo!). En todos los casos, era minúscula, pero seguía siendo un elemento SVG en FF, Chrome e IE9 (no sé si eran válidos porque no sé SVG, me temo).

Firefox Example Chrome Example IE Example

+0

Cambié mi archivo HTML a para ver si eso ayudaría pero no tuve suerte. http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute esta es la referencia al atributo ViewBag. ¿Alguna otra idea? –

+0

Actualizado 2, necesito usar Javascript integrado en setAttribute Supongo :( –

+0

Eso funcionó. Gracias! –

-3

que puede utilizarlo. Creo que usted está viendo en es decir desarrollador barra de herramientas

su fina

es sólo mostrarlo minúscula

pero si intenta alertar al valor camel case - que SE ver el resultado.

tratar de hacer:

alert(("svg").attr("viewBox")); 
+0

Así que cuando ejecuto la alerta me devuelve el valor de viewBox sin importar si es un caso normal o camello. el atributo no existe en el elemento y lo agrego usando este método lo pone en minúscula. –

+0

'(" svg "). attr (" viewBox ")' muestra el valor de "viewbox". jQuery establece el nombre en minúsculas al obtener el valor también – Dinoboff

3

Dado que html no distingue entre mayúsculas y minúsculas y las etiquetas y atributos xhtml deben estar en minúsculas, jQuery convierte el nombre del atributo en minúsculas. Debido a que xml distingue entre mayúsculas y minúsculas, es un problema para el lenguaje xml incrustado cuando usan nombres de atributos camel case como SVG.

Puede usar los ganchos jQuery para manejar los nombres de los atributos que le gustaría que la caja no se convierta. Si jQuery encuentra jQuery.attrHooks[attributename].set para establecer, lo usará para establecer el atributo. Lo mismo para jQuery.attrHooks[attributename].get cuando intenta recuperar el valor del atributo. Por ejemplo:

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

Ahora jQuery usará su setter/getters para manipular esos atributos.

Nota: el.attr('viewBox', null) fallaría; 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. Por lo tanto, un elemento terminará con los atributos 'viewbox' y' viewBox'. No es que no funcione. pero no está tan limpio como podría. –

+0

No me di cuenta. En cuanto a 'jQuery.fn.attr', debe delegar la configuración del atributo en el gancho. ¿Cómo se establece una versión en minúscula del atributo también? https: // githu b.com/jquery/jquery/blob/master/src/attributes/attr.js#L40-L73 – Dinoboff

+1

@JasmineHegman Fixed. jquery espera que el colocador devuelva verdadero si establecer el atributo fue exitoso – Dinoboff

Cuestiones relacionadas