2

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

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

 tev.appendTo(lane.scrolled);

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

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

让 jquery 选择器返回我的对象​​的最佳方法是什么?

4

3 回答 3

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 节点,这是两个对象中完全相同的节点,因此该属性在双方都可以访问。

于 2013-08-24T14:01:53.670 回答
1

使用数据功能。

var $element = $('some_selector')
$element.data("stuff", {
    layout: function(){}
});
于 2013-08-24T14:02:34.423 回答
0

简短的回答是你不能。我认为您需要了解 HTML 和 DOM 之间的区别。DOM 是一种 API,浏览器可以使用它来操作 HTML,而 HTML 最终变成了文本。有关更多详细信息,请参阅问题。

因此,基本上当您使用 JQuery 时,它仅通过 DOM api 进行更改,因此仅限于 api 公开的内容。您已经尝试过的解决方案是唯一的选择,也是最常用的。

于 2013-08-24T14:04:58.560 回答