2011-07-01 27 views
4

我需要使用单个jQuery调用来计算new并编辑SVG元素(rect)的'x'和'y'属性。在单个jQuery调用中计算和编辑多个属性

现在我知道你可以这样做:

var incBy = 20; 

$('#test').attr('x', function(i, val) { 
    return parseInt(val) + incBy; 
}); 

这是很好的计算和编辑单一属性,但我怎么可以编辑在这样多重属性?

回答

0

如果您因素出来,你也可以做到在同一行:

$('#test').attr('x', myFunction).attr('y', myFunction); 

function myFunction(i, val) { 
    return parseInt(val) + incBy; 
} 

或抽象它更多传递到一个单独的功能属性要将此应用到

process('x', 'y'); 

function process() { 
    for (var i = 0; i < process.arguments.length; i++) 
    $('test').attr(process.arguments[i]), myfunction); 

    function myFunction(i, val) { 
    return parseInt(val) + incBy; 
    } 
} 

这取决于你想走多远。您可以在参数中包含要调用的函数,也可以包含选择标准。

+0

谢谢你使它看起来不错@Tomalak!我需要多练习。 –

+0

没关系。 :)这是该网站更好的功能之一,你可以(以足够的声誉)编辑每一篇文章。 – Tomalak

1

我不确定如何在多个属性上执行此操作,但是如果您正在寻找防止重复代码的方法,则可以重构匿名函数。

$('#test').attr('x', myFunction); 
$('#test').attr('y', myFunction); 

function myFunction(i, val) { 
    return parseInt(val) + incBy; 
} 
3
var incBy = 20; 

$('#test').each(function() { 
    this.x += incBy; 
    this.y += incBy; 
}); 

,或者更优雅,这

$.fn.extend({ 
    modCoordsBy: function(amount) { 
    for (var i=0, j=this.length; i<j; i++) { 
     this[i].x += amount; 
     this[i].y += amount; 
    } 
    return this; 
    } 
}); 

$('#test').modCoordsBy(20); 

适用范围检查或型式试验,以xy为(如果你还想要修改成千上万个对象具有更高的性能)你觉得合适。

+0

这么简单......我怎么忽略它!如果这样做,我会踢自己的嘴;) – Steve

+1

准备好你的嘴被踢LOL:D –

4

你可以尝试使用带有jQuery的attr方法的地图。

$('#test').attr(
     {'x': editValue, 
     'y': editValue 
     }); 
function editValue(i, val) { 
    return parseInt(val) + incBy; 
}; 
+0

+1我不知道。尽管如此,它仍然是*两个*函数调用。 – Tomalak