插件 - 获取对传递对象的引用

时间:2009-11-29 17:38:35

标签: jquery plugins

我正在尝试创建我的第一个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);

第一次警报有效而其他警报无效是没有意义的。 什么可能是错的?

2 个答案:

答案 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);