13

我有这样的事情:

        <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");

他们都没有工作

4

5 回答 5

29

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

当您使用 jquery 的选择器语法时,它会返回一个对象——在 jquery 中定义——它本质上是选择器匹配的所有元素的列表。无论它匹配一个元素(应该总是使用 id 选择器)还是多个,返回的对象都是元素列表,而不是单个 DOM 对象(例如单个元素)。 setAttribute是实际HTMLElement对象的方法。

这就是为什么

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

有效,但是

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

才不是。jquery 元素没有那个方法,即使HTMLElement它的列表中的对象有。

如果您想(无论出于何种原因)使用本机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 时,让它们真正工作。

于 2012-04-10T05:51:23.117 回答
3

关于什么:

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

或者

$('#frame').attr("width","50");
于 2012-04-10T05:18:01.773 回答
2

1)使用attr

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

2) 使用 DOM 对象:

$("#frame")[0].setAttribute("width", "50");
于 2012-04-10T05:16:38.923 回答
1
$(document).ready( function() {
var ysr = $('iframe').attr('src');
var nysr = ysr + "HD=1;rel=0;showinfo=0";
$('iframe').attr('src', nysr);});
于 2015-11-01T11:00:43.523 回答
0

编辑:看到你确实有身份证。你能看看代码是否真的在运行吗?好像被触发了?另外,尝试更改allowfullscreenallowfullscreen="true"

于 2012-04-10T05:18:32.337 回答