Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个jQuery调用中计算和编辑多个属性_Jquery_Edit_Attr - Fatal编程技术网

在一个jQuery调用中计算和编辑多个属性

在一个jQuery调用中计算和编辑多个属性,jquery,edit,attr,Jquery,Edit,Attr,我需要使用一个jQuery调用计算并编辑SVG元素(rect)的“x”和“y”属性 现在我知道你可以做到这一点: var incBy = 20; $('#test').attr('x', function(i, val) { return parseInt(val) + incBy; }); 这对于计算和编辑单个属性很好,但是如何用这种方式编辑多个属性?我不确定如何在多个属性上进行编辑,但是如果您正在寻找防止重复代码的方法,可以重构匿名函数 $('#test').attr('x',

我需要使用一个jQuery调用计算并编辑SVG元素(rect)的“x”和“y”属性

现在我知道你可以做到这一点:

var incBy = 20;

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

这对于计算和编辑单个属性很好,但是如何用这种方式编辑多个属性?

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

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

function myFunction(i, val) {
    return parseInt(val) + incBy;
}
或者,更优雅地说,这(如果要修改数千个对象,也具有更高的性能)

$.fn.extend({
modCoordsBy:函数(金额){

对于(var i=0,j=this.length;i如果您将其计算出来,也可以在一行中完成:

$('#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; 
  }
}
过程('x','y');
函数过程(){
for(var i=0;i

这取决于您要走多远。您可以在参数中包括要调用的函数,以及选择条件。

您可以尝试使用带有jQuery的attr方法的映射

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

这么简单…我怎么会忽略它!如果这样做有效,我会踢自己的嘴;)准备好你的嘴被踢LOL:D+1我不知道。尽管如此,它仍然是两个函数调用。谢谢你让它看起来很好@Tomalak!我需要更多的练习。没关系。:)这是网站的一个更好的功能,你可以(有足够的声誉)编辑每个帖子。
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; 
  }
}
$('#test').attr(
        {'x': editValue,
         'y': editValue
        });
function editValue(i, val) {
   return parseInt(val) + incBy;
};