如何在自定义jquery插件中使用$(this)

时间:2017-05-15 09:51:45

标签: jquery jquery-plugins

这是我的代码

$('#J_todayComm').myScroll({
    ajaxUrl: $(this)
});

我想要$(this) - > $('#J_todayComm'),但它是$(doucmen)

我的插件代码myScroll.js

$.fn.myScroll = function (options) {
    var s = $.extend({
        debug: false,
        threshold: 65,
        loading: false,
        ajaxUrl: '',
        ajaxMethod: 'GET',
        ajaxData: {},
        loadSuccess: function () {
        },
        template: function () {
            console.error("Need Template");
        }
    }, options);
    console.log(s.ajaxUrl); //I want it is $('#J_todayComm')
    // jquery对象
    var $self = this;
    // 原生DOM对象
    var self = this[0];
    ......
    function getDate() {
        if (!s.ajaxUrl) {
            console.error('Need url');
            return '';
        }
        $.ajax(s.ajaxUrl, {
            method: s.ajaxMethod,
            data: s.ajaxData,
            dataType: 'json',
            success: function (res) {
                ...
            },
            error: function () {
                ...
            }
        });
    }

    return $self;

};

如何编写代码?大家好。

2 个答案:

答案 0 :(得分:1)

要使this关键字引用选择器中的元素,您需要更改调用范围。你可以通过使用each()迭代元素来实现这一点:

$('#J_todayComm').each(function() {
  var $el = $(this);
  $el.myScroll({
    ajaxUrl: $el.data('ajax-url'),
    // other settings...
  });
});

答案 1 :(得分:0)

代码

$.fn.extend({
  myScroll:function(){
    console.log(this);//這是你的本物件了
  }
})

$('#J_todayComm').myScroll();

更改另一种方式来扩展fn然后你不依赖于orign jquery功能,并且可以获得this你的对象(并且没有你的options)。