对不起,这个问题是“新手”。我不完全确定我试图做的是否可行,但我想我会检查。
我有一个脚本可以找到并操作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();
});
显然,这个例子不起作用。我正在努力做甚么可能吗?
答案 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
处理程序之外定义。此外,您很可能可以更加简化这一点,但如果不知道doSomething1
,doSomething2
等实际上做了什么,就很难说清楚。
答案 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]();
}
});