我遇到了一个烦人的问题 - 不知道这里有什么问题。
我的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并试图获取已经分配的值时 - 我得到了未定义。
任何想法都有什么问题?
谢谢!
答案 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
答案 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