Sarfraz が既に指摘したように、jquery セレクター オブジェクトの属性を設定する正しい方法は、attr("attrName", "attrVal")
. うまくいかなかった理由は、setAttribute
説明する価値のあるものです。私はこの点に何度も頭を悩ませてきました。
jquery のセレクター構文を使用すると、jquery で定義されたオブジェクトが返されます。これは基本的に、セレクターが一致したすべての要素のリストです。1 つの要素 (常に id セレクターの場合) または複数の要素に一致するかどうかにかかわらず、返されるオブジェクトは要素リストであり、単一の DOM オブジェクト (単一の要素など) ではありません。 setAttribute
実際のHTMLElement
オブジェクトのメソッドです。
これが理由です
$("#frame")[0].setAttribute("width", "200");
動作しますが、
$("#frame").setAttribute("width", "200");
ではない。HTMLElement
リスト内のオブジェクトにはありますが、jquery 要素にはそのメソッドがありません。
(何らかの理由で) ネイティブHTMLElement
メソッド (または入力など、セレクターが返す要素に共通のメソッド) を使用したい場合は、次のeach()
ように jquery のメソッドを使用できます。
// Set all iframes to width of 250
$("iframe").each(
function(index, elem) {
elem.setAttribute("width","250");
}
);
メソッドのeach()
コールバックには 2 つのオプション パラメータを渡すことができます。1 つ目はセレクタ リスト内の要素のインデックス、2 つ目はネイティブ DOM メソッドを呼び出すことができる実際の DOM 要素です。
私が言ったように、ネイティブ メソッドで jquery のセレクターの結果を複数回使用する方法を理解しようとして本当にイライラしましたsetAttribute()
。同等のjqueryが見つからない場合に実際に機能させるために。