2009-11-10 2 views
0

Я google, но не нашел что-то вроде этого.Атрибуты копирования JQuery

Я имею в IFRAME с 2 основными атрибутами SRC = # и ссылки = 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 скрипт, но я не хочу, чтобы загрузить страницу Thats, почему я б # в качестве источника, теперь, когда я нажимаю кнопку на сайте будет загружаться 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

+0

Из документов jquery: «Важно отметить, что метод .attr() получает значение атрибута только для первого элемента в согласованном наборе». –

+1

Sameer - $ ('# myiframe') должен возвращать только один элемент, потому что хэш обозначает id - и идентификаторы должны быть unqiue на данной странице, иначе у вас есть дефектный html. – Sorcy

1

Я сомневаюсь, что вы можете получить более эффективно, чем это:

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

Примечание: я использовал slice() вместо substr(), потому что IE не поддержка отрицательная start значения.

Смежные вопросы