我正在编写第一个jQuery插件,但遇到了一些问题。在我的第一次尝试中,我成功地实现了基本插件,但现在我需要公开其他方法供客户机使用。
在阅读了大量文章、stackoverflow文章和文档之后,我认为我可以创建一个对象并将其存储在element.data()缓存中。但是,我编写的代码在调用插件时似乎引用了相同的对象。
var CONST_TEST_KEY = "test-data-key";
(function($){
var TestObject = function(e, o){
var elem = $(e);
this.random = Math.floor(Math.random() * 100);
this.GetRandom = function() {
alert(this.random);
}
};
$.fn.testJQueryPlugin = function(o) {
return $.each(function() {
var currentElement = $(this);
if(currentElement.data(CONST_TEST_KEY))
return;
currentElement.data(CONST_TEST_KEY, new TestObject(currentElement, {}));
});
};
})(jQuery)
HTML:
<script type="text/javascript">
$(document).ready(function() {
var object1 = $("#entry1").testJQueryPlugin();
var object2 = $("#entry2").testJQueryPlugin();
alert($(object1).data(CONST_TEST_KEY).random);
alert($(object2).data(CONST_TEST_KEY).random);
});
</script>
</head>
<body>
<div id="entry1">
x
</div>
<div id="entry2">
y
</div>
</body>
此代码显示两个警报的值都相同。我希望每个警报都有不同的值。我很感激任何解决方案、指针,以及更好的解释,为什么它会以这种方式工作和/或为什么我应该以不同的方式工作。