2009-11-10 99 views
0

我谷歌了,但沒有找到這樣的事情。jquery複製屬性

我有2個主要屬性SRC =#和鏈接的iframe = 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> 

我加載該iframe在HTML從一些PHP腳本,但我不希望加載的頁面這就是爲什麼我二手#源,現在,當我點擊網站上的一個按鈕,它會加載的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中複製f從一個屬性到另一個屬性,或者如果有更好的解決方案來完成這個。

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

我知道如下因素將工作

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

,但我認爲這是不以多少來選擇兩次相同的元素。 (我很親切的優化瘋子的:))

或者你認爲我必須使用的函數:

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

我的問題是什麼是實現這一目標的最佳途徑。謝謝。

回答

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的單擊事件是這樣的:

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

這將與多個元素一起工作嗎?即如果$('#myiframe')返回一組10?我相信第二個解決方案會,但不是第一個 – Sameer 2011-01-10 18:42:27

+0

來自jquery文檔:「重要的是要注意,.attr()方法僅爲匹配集中的第一個元素獲取屬性值。」 – 2011-01-12 11:46:00

+1

Sameer - $('#myiframe')應該只返回一個元素,因爲散列表示一個id - 並且id應該在給定頁面中不同一,否則你的html有缺陷。 – Sorcy 2011-06-09 11:19:10

1

我懷疑你能比這得到更有效:

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

注:我用slice()代替substr()因爲IE不支持負值start值。