通过命名和重新调用重复的片段来简化jQuery代码

时间:2015-05-11 22:59:37

标签: javascript jquery function parameters

对不起,这个问题是“新手”。我不完全确定我试图做的是否可行,但我想我会检查。

我有一个脚本可以找到并操作iframe中的许多不同元素,如下所示:

$(window).load(function(){

    $('#iframe').contents().find('target1').doSomething1();
    $('#iframe').contents().find('target2').doSomething2();
    $('#iframe').contents().find('target3').doSomething3();
    $('#iframe').contents().find('target4').doSomething4();
    $('#iframe').contents().find('target5').doSomething5();
    $('#iframe').contents().find('target6').doSomething6();
    $('#iframe').contents().find('target7').doSomething7();
    $('#iframe').contents().find('target8').doSomething8();
    $('#iframe').contents().find('target9').doSomething9();
    ...

});

如果可能,我想做的是通过定义和回忆$('#iframe').contents().find()作为某种较短的表达式,使代码更短,更易读。像这样:

$(window).load(function(){

    function iframe(){
        $('#iframe').contents().find()
    }

    iframe('target1').doSomething1();
    iframe('target2').doSomething2();
    iframe('target3').doSomething3();
    iframe('target4').doSomething4();
    iframe('target5').doSomething5();
    iframe('target6').doSomething6();
    iframe('target7').doSomething7();
    iframe('target8').doSomething8();
    iframe('target9').doSomething9();

});

显然,这个例子不起作用。我正在努力做甚么可能吗?

5 个答案:

答案 0 :(得分:2)

当然 - 你只需要一个功能。你是那里的一部分,但你需要指定和使用参数。

示例:

function iframe(target) {
    return $('#iframe').contents().find(target);
}

$(window).load(function(){
  iframe('target1').doSomething1();
  iframe('target2').doSomething2();
  iframe('target3').doSomething3();
  iframe('target4').doSomething4();
  iframe('target5').doSomething5();
  iframe('target6').doSomething6();
  iframe('target7').doSomething7();
  iframe('target8').doSomething8();
  iframe('target9').doSomething9();

});

请注意,该函数可以(也可能应该)在.load处理程序之外定义。此外,您很可能可以更加简化这一点,但如果不知道doSomething1doSomething2等实际上做了什么,就很难说清楚。

答案 1 :(得分:1)

这就是一个功能。你实际上比你意识到的更近,你只需要你的函数接受一个参数并返回一个结果:

res$origin <- row.names(res)

答案 2 :(得分:1)

保持简单和愚蠢。

当问到这个问题的人说他是功能新手时,我建议这个易于理解的解决方案。然后他会知道如何在JQuery中变得更高级之后做更短更快的事情。 否则,他将使用高级解决方案而不了解它们。如果他习惯使用他并不确切知道它实际上是什么的代码,那就加上它。

 $(window).load(function(){
    iFrame('#id1');
    iFreme('#id2');
    ...
    });

function iFrame(x)
{

if(x=='#id1')
{
      $('#iframe').contents().find($(x)).doSomething();

}
else if (x=='#id2')
{
      $('#iframe').contents().find($(x)).doSomethingElse();

}
...

}

答案 3 :(得分:0)

我实际上赞成以下几点:

$(window).load(function(){
    var $contents = $('#iframe').contents();
    $contents.find('target1').doSomething1();
    $contents.find('target2').doSomething2();
    $contents.find('target3').doSomething3();
    $contents.find('target4').doSomething4();
    $contents.find('target5').doSomething5();
});

找到内容()的原因是范围搜索比$(&#39;#iframe&#39;)搜索范围小。或者你也可以做

$(window).load(function(){
    var $targets = $('#iframe').contents().find('target1, target2, target3, target4, target5');
    $targets.filter('target1').doSomething1();
    $targets.filter('target2').doSomething2();
    $targets.filter('target3').doSomething3();
    $targets.filter('target4').doSomething4();
    $targets.filter('target5').doSomething5();
});

这有一个额外的好处,即执行一次查找,然后对结果数组进行过滤以找到要操作的对象,而不是对要执行的每个目标的内容dom进行查找。

答案 4 :(得分:0)

$(window).load(function(){
    var i = 1,
        $contents = $('#iframe').contents();

    for (; i < 10; i++) {
        $contents.find('target' + i)['doSomething' + i]();
    }
});