如何从jquery选择器获取“真实”对象

时间:2013-08-24 13:57:08

标签: jquery oop

当我编写OO风格的javascript时,我最终得到的对象通常来自<div>。我添加自己的属性和成员函数,使用jquery的appendTo()方法将其放入DOM中。

 tev.layout = function() {
                ...                    
        };

 tev.appendTo(lane.scrolled);

但是,当我通过jquery选择器检索这些对象时,我的属性不再存在。在上面的示例中,layout()函数不再可见。我可以使用jquery的attr()函数添加属性,但这看起来很难看。

偶尔我会通过保留自己的私有副本来解决这个问题。这些对象将保留我给它们的所有属性。但是,这似乎是浪费,因为我将不得不编写自己的对象遍历查询而不是使用jquery。

使jquery选择器返回我的对象​​的所有属性的最佳方法是什么?

3 个答案:

答案 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公开的内容。您已经尝试过的解决方案是唯一的选择,也是最常用的解决方案。