Does the attr() in jQuery force lowercase?

牧云@^-^@ 提交于 2019-12-28 04:22:29

问题


I'm trying to manipulate the svg 'viewBox' attribute which looks something like this:

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

Using

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

However, this creates a new attribute in the element called "viewbox". Notice the lowercase instead of intended camelCase. Is there another function I should be using?


回答1:


I was able to use pure javascript to get the element and set the attribute by using

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

and

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



回答2:


Per http://www.w3.org/TR/xhtml1/#h-4.2 "XHTML documents must use lower case for all HTML element and attribute names."

So in order to avoid having the attribute convert to lowercase in an XHTML document you need to create the element specifying a namespace using document.createElementNS(), like:

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

If you plan to add a <use/> element you also need to specify the namespace while creating the element as well as the xlink:href attribute, like:

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



回答3:


You could use jQuery hooks:

['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);
    },
  };
});

Now jQuery will will use your setter/getters to manipulate those attributes.

Note that el.attr('viewBox', null) would have failed; your hook setter won't be called. Instead you should use el.removeAttr('viewBox').




回答4:


you want to make sure you remove the attr if it already exists before manipulating it

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

and then recreating it

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


来源:https://stackoverflow.com/questions/12361971/does-the-attr-in-jquery-force-lowercase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!