我正在尝试创建我的第一个jQuery插件。 我有一个名为myListview的原型函数,并希望将插件(名为initLV)应用于它。
功能:
function myListview(div)
{
this.div = div;
$(this).initLV(); // apply the plugin
}
如您所见,我将整个原型对象传递给插件。 我的问题:如何从插件中访问对象的div? 这是我的插件代码 - 第一个警报有效,但所有其他警告都没有:/
(function ($) {
$.fn.initLV = function ()
{
alert($("tr",this.div).length); // works
alert(this.div.html()); // don't work
alert($(this.div).html()); // don't work
alert($(this).div.html()); // don't work
}
})(jQuery);
第一次警报有效而其他警报无效是没有意义的。 什么可能是错的?
答案 0 :(得分:1)
我认为div
只是this
所属的字段。 div
包含的内容。如果它包含html元素,那么您应该使用alert($(this[0].div).html());
代替。但最好使用Dan Herbert的答案来演示编写插件的正确方法。
答案 1 :(得分:1)
我认为你对jQuery插件的工作方式有点困惑。 jQuery插件允许您对jQuery对象执行操作。看起来您的代码创建了一个自定义对象,然后尝试“jQuery-ify”它。我不认为你的第一个函数甚至可以作为有效的jQuery。我认为它恰好起作用,因为jQuery很好地忽略了无效的参数。
如果我知道你的最终目标是什么会有所帮助,但是我想你可能想尝试这样的事情:
你的职能:
function myListview(div)
{
$(div).initLV();
}
你的插件
(function ($) {
$.fn.initLV = function () {
// "this" will be a jQuery object storing your
// div, or whatever else the jQuery object
// contains when it gets called.
alert($("tr", this).length); // works
alert(this.html()); // works
alert(this.find("tr").html());// works
}
})(jQuery);