正如 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");
}
);
The each()
方法的回调可以传递两个可选参数,第一个是选择器列表中元素的索引,第二个是实际的 DOM 元素,您可以在其上调用本机 DOM 方法。
就像我说的,我在试图弄清楚如何多次使用本机方法使用 jquery 的选择器结果时感到非常沮丧,所以我希望这不仅有助于澄清原因setAttribute()
不起作用,但一般来说是本机方法,以及当您找不到 jquery 等效项时如何实际让它们工作。