奇怪的SVG / javascript行为

时间:2013-05-16 09:31:24

标签: javascript jquery svg

我可能会遗漏一些必要的东西。

我正在使用此功能更改某些SVG文本元素中的日期格式。

jQuery.fn.fixDateformat = function(){
        ar = $(this).text().split("/")
        output = [ar[1], ar[0], ar[2]].join(".")
        $(this).text(output)
    };

在控制台中,我得到了一个我想要改变的元素数组。

> array = $("text[x='0']")
[
<text y=​"5" dy=​".71em" text-anchor=​"middle" x=​"0">​04/21/13​</text>​, 
<text y=​"5" dy=​".71em" text-anchor=​"middle" x=​"0">​04/26/13​</text>​, 
<text y=​"5" dy=​".71em" text-anchor=​"middle" x=​"0">​05/02/13​</text>​, 
<text y=​"5" dy=​".71em" text-anchor=​"middle" x=​"0">​05/08/13​</text>​, 
<text y=​"5" dy=​".71em" text-anchor=​"middle" x=​"0">​05/14/13​</text>​
]

当我将函数传递给其中一个元素时,它可以工作。 Yeay!

> array.first().fixDateformatOnCharts()

但是,当我遍历数组时,我得到了这个错误。

> array.each(function(i,v){ v.fixDateformatOnCharts()})
TypeError: Object #<SVGTextElement> has no method 'fixDateformatOnCharts'

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您应该使用$(v)将元素v转换为jQuery对象。

array.each(function(i,v){ $(v).fixDateformatOnCharts(); });

也许将这个功能添加到插件本身会更好:

jQuery.fn.fixDateformat = function() {
  return this.each(function(i, el) {
    ar = $(el).text().split("/");
    output = [ar[1], ar[0], ar[2]].join(".");
    $(this).text(output);
  });
};

所以你可以使用array.fixDateformat();