2011-01-18 14 views
2

私は厄介な問題に悩まされています。何が間違っているのか分かりません。jQuery:属性の割り当てに関する問題

私のHTMLマークアップ:

<div id=myDiv1 widget=bla>test</div> 
<div id=myDiv2 widget=bla>test</div> 

私のjqueryのコード:

var div = $("#myDiv1"); 
div.foo = "bar"; 
alert(div.foo); // returns 'bar' 

var div = $("div[widget]"); // grabs both divs 
alert(div.eq(0).foo); // returns undefined 

、について説明: 私は第一のdiv、 にFOO =バーを割り当てるが、両方のグラブセレクタを使用しているときですdivsと既に割り当てられた値を取得しようとする - 私は未定義になっています。

何が問題なのですか?

ありがとうございました!

+1

'alert(div.eq(0).foo); // undefined'を返しますもちろんもちろんです。 'eq()'はフィルタリングされたjQueryオブジェクトを返します。それを 'alert(div.get(0).foo);'に変更して実際のDOM要素を取得したいとします。私はそれがあなたがやろうとしているものだと考えています(他の問題はもちろんのことです)。これらの例のどれも実際にはDOM属性で何かをしています –

答えて

2

あなたがいないDOM node参照の上、jQueryオブジェクトのプロパティを作成しています。

var div = $("#myDiv1"); 
div[0].foo = "bar" 

となります。また、jQuerysの.data()メソッドを使用して、ノードのデータを格納することもできます(おそらくそうするべきです)。参考

div.data('foo', 'bar'); // setter 
var foo = div.data('foo'); // getter 

.data()、あなたの例ではjQuery.data()

0

あなたはこれを行うことができます:

//Adding attribute 
$("#myDiv1").attr("foo", "bar"); 

//Getting attribute 
$("div[widget]:first").attr("foo"); 
0

あなたが属性を割り当てるためのattr機能を使用する必要があります。

var div = $("#myDiv1"); 
div.attr("foo","bar"); 
alert(div.attr("foo")); 
div = $("div[widget]"); 
alert(div.eq(0).attr("foo")); 
+0

私はこのメソッドを知っていますが、divオブジェクトに値を直接代入しても問題ありませんか? (私はプラグインの中でそれを使いたい)。 私が見つけた唯一の回避策は、div.data( "foo"、 "bar")を使用しています。 – Fuxi

+0

div要素にHTML属性を割り当てたり、div javascriptオブジェクトにプロパティを割り当てる方法は2つあります。最初のものはdiv.get(0)を使うことができます。後者の場合は、$( "div [widget]")を使用したときの値とは異なる値のオブジェクトであるため、setAttribute( "foo"、 "bar")を呼び出すことはできません。 – Chandu

2

var div = $('#myDiv1')は、HTML要素のためのjQuery ラッパーオブジェクトです。要素は一意ですが、セレクタを使用するたびにjQueryラッパーが再作成されるため、変更が失われます。この問題を回避、あなたがいずれかを使用して、HTML要素自体に値を割り当てることができる

div.get(0).foo = 'bar'; 
// Or 
div[0].foo = 'bar; 

をしかし、要素自体を変更する、または非標準の属性を使用して、良い習慣ではありません。 jQueryのは、より安全な代替メカニズム、.data()を提供しています。

// Set data 
div.data('foo', 'bar'); 
// Get it again 
div.data('foo'); 
// Or from your second example 
div.eq(0).data('foo'); 
0

あなたがそのリセットを行うたら、それは.fooという値を持っていないので、あなたは、DIVをリセットしています。これを試してみてください...

<div id=myDiv1 widget=bla1>test</div> 
<div id=myDiv2 widget=bla2>test</div> 

var div = $("#myDiv1"); 
div.foo = "bar"; 
alert(div.foo); // returns 'bar' 

var div = $("div[widget]"); // grabs both divs 

alert(div.eq(0).attr('widget')); // returns bla1 
関連する問題