jQuery:分配属性的问题

时间:2011-01-18 14:02:17

标签: jquery selector

我遇到了一个烦人的问题 - 不知道这里有什么问题。

我的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

的解释: 我将foo = bar指定给第1个div, 但是当使用一个选择器来抓取两个div并试图获取已经分配的值时 - 我得到了未定义。

任何想法都有什么问题?

谢谢!

5 个答案:

答案 0 :(得分:2)

您正在jQuery对象上创建属性,而不是DOM node引用。

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

会做到的。您也可以(也可能应该)使用jQuerys .data()方法来存储节点的数据。

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

参考:.data()jQuery.data()

答案 1 :(得分: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');

答案 2 :(得分:0)

你可以这样做:

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

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

答案 3 :(得分:0)

您需要使用attr函数来分配属性。

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

答案 4 :(得分:0)

你正在重置div,所以一旦你重置了它就没有.foo值。试试这个...

<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