2012-04-10 34 views
9

属性我有一些像这样:变化的iframe使用jQuery

 <iframe id="frame" width="200" height="150" 
    src="http://www.youtube.com/embed/GiZGEFBGgKU?rel=0& 
amp&iv_load_policy=3;autoplay=1" frameborder="0" allowfullscreen></iframe> 

而且我想改变的宽度和高度使用jquery我尝试:

$("#frame").setAttribute("width", "50"); 
$("iframe").setAttribute("width", "31"); 

他们没有工作

回答

24

正如Sarfraz已经指出的,设置jquery选择器对象的属性的正确方法是使用attr("attrName", "attrVal")setAttribute不起作用的原因是值得解释的,因为我不止一次地碰到这一点:

当你使用jquery的选择器语法时,它返回一个对象 - 在jquery中定义 - - 这实质上是选择器匹配的所有元素的列表。无论它是否匹配一个元素(应始终是一个id选择器)或多个元素,返回的对象是元素列表,而不是单个DOM对象(例如单个元素)。 setAttribute是实际的HTMLElement对象的方法。

这就是为什么

$("#frame")[0].setAttribute("width", "200"); 

作品,但

$("#frame").setAttribute("width", "200"); 

没有。即使jQuery元素列表中的HTMLElement对象所做的事情,jQuery元素也没有该方法。

如果你想(无论什么原因),使用原生HTMLElement方法(或共同的元素您选择退货,如输入等的方法),你可以使用jQuery的each()方法,像这样:

// Set all iframes to width of 250 
$("iframe").each(
    function(index, elem) { 
     elem.setAttribute("width","250"); 
    } 
); 

each()方法的回调可以传递两个可选参数,第一个是选择器列表中元素的索引,第二个是实际DOM元素,您可以调用本机DOM方法。

就像我说的,我非常沮丧地试图找出如何使用本机方法多次使用jquery的选择器结果,所以我希望这有助于清除为什么setAttribute()不起作用,但本机方法一般来说,以及如何当你找不到相当的jquery时真正让他们工作。

+0

+1进行详细说明:) – Sarfraz 2012-04-10 06:09:41

+1

+1详细信息^^ – Ben 2012-04-10 23:44:02

2

1)使用attr

$("#frame").attr("width", "31"); 

2)使用DOM对象:

$("#frame")[0].setAttribute("width", "50"); 
+0

prop()dosent work – Ben 2012-04-10 05:18:02

+1

是不是'width'属性而不是属性?我可能是错的,但我敢肯定你应该使用'attr()'... – elclanrs 2012-04-10 05:20:09

+0

@Even - 你确定它没有调整,但Youtube的内容只是固定的大小? – jmort253 2012-04-10 05:20:17

3

什么:

$('#frame').width(x) 

$('#frame').attr("width","50"); 
+0

+1的attr!我不想添加为我自己的,所以我将它添加到你的。 – jmort253 2012-04-10 05:22:10

0

编辑:看到你确实有ID。你能看看代码是否真的在运行吗?就像它被触发一样?另外,尝试更改allowfullscreenallowfullscreen="true"

0
$(document).ready(function() { 
var ysr = $('iframe').attr('src'); 
var nysr = ysr + "HD=1;rel=0;showinfo=0"; 
$('iframe').attr('src', nysr);});