Jquery复制属性

时间:2009-11-10 08:53:36

标签: jquery

我谷歌了,但没有找到这样的东西。

我的iframe有2个主要属性s​​rc =#和link = http://somesite.com

<iframe id="myiframe" src="#" link="https://somesite.com?id=x&anotherid=y" style="position:absolute; left:0px; top:0px; width:99%; min-width:80%; height:99%; min-height:80%; padding:0px;"></iframe>

我从某些PHP脚本加载HTML中的iframe,但我不想加载页面,这就是我使用#作为源的原因,现在当我点击网站上的按钮时,它将加载iframe(如果不是从上一次点击加载,我的临时解决方案是:

<input type="button" value="load" onClick="var fr = document.getElementById('myiframe');if(fr.src.substr(-1)=='#'){fr.src=document.fr.getAttribute('link')};" />

现在我有一点时间来实现jQuery,我想知道jQuery中是否有一些简单的代码可以从属性复制到另一个属性,或者是否有更好的解决方案来实现这一点。

这样的事情:     $('#myiframe')。attr('src',attr('link'));

我知道下面的内容会有效吗

$('#myiframe').attr('src', attr('link'));

但我认为选择相同的元素两次并不多。 (我是一个优化者疯子:))

或者你认为我必须使用一个函数:

$('#myiframe').attr('src', function(){
    ...
});

我的问题是实现这一目标的最佳方法是什么。谢谢。

2 个答案:

答案 0 :(得分:5)

如果您不想两次选择元素 - 请将其缓存。

var $myiframe = $('#myiframe');
$myiframe.attr('src', $myiframe.attr('link'));

我认为 $('#myiframe').attr('src', attr('link')); 不起作用。

您也应该能够使用某个功能:

$('#myiframe').attr('src', function () {
    return $(this).attr('link');
});

另外,作为旁注 - 尽量避免使用onclick=属性。只需将jQuery绑定到click事件,如下所示:

$('input[type=button][value=load]').click(function () {
    // One of the solutions above
});

答案 1 :(得分:1)

我怀疑你能比这更有效率:

var fr = $('#myiframe');
if (fr.attr('src').slice(-1) === '#') {
  fr.attr('src', fr.attr('link'));
}

注意:我使用slice()代替substr(),因为IE不支持负start值。