当我编写OO风格的javascript时,我最终得到的对象通常来自<div>
。我添加自己的属性和成员函数,使用jquery的appendTo()方法将其放入DOM中。
tev.layout = function() {
...
};
tev.appendTo(lane.scrolled);
但是,当我通过jquery选择器检索这些对象时,我的属性不再存在。在上面的示例中,layout()函数不再可见。我可以使用jquery的attr()函数添加属性,但这看起来很难看。
偶尔我会通过保留自己的私有副本来解决这个问题。这些对象将保留我给它们的所有属性。但是,这似乎是浪费,因为我将不得不编写自己的对象遍历查询而不是使用jquery。
使jquery选择器返回我的对象的所有属性的最佳方法是什么?
答案 0 :(得分:2)
您遇到的问题是您要将自定义属性附加到jQuery对象,但每次调用$
时,您都会生成一个带有匹配元素的新jQuery对象。
考虑一下:
var a = $("div"), b = $("div");
a.testProperty = true;
alert(b.testProperty); // undefined
您实际上并未将该属性添加到元素中。但是,如果你这样做:
var a = $("div"), b = $("div");
a[0].testProperty = true;
alert(b[0].testProperty); // true
由于该属性被添加到底层DOM节点(两个对象中的节点完全相同),因此可以在两端访问该属性。
答案 1 :(得分:1)
使用数据功能。
var $element = $('some_selector')
$element.data("stuff", {
layout: function(){}
});
答案 2 :(得分:0)
简短的回答是,你做不到。我认为您需要了解HTML和DOM之间的区别。 DOM是一种API,浏览器可以使用它来操作HTML,后者原来是文本。有关详细信息,请参阅this问题。
所以基本上当你使用JQuery时,它只通过DOM api进行更改,因此仅限于api公开的内容。您已经尝试过的解决方案是唯一的选择,也是最常用的解决方案。