用jquery插件无法获得正确的div

时间:2018-02-19 20:28:56

标签: jquery

我有一个带有基本jquery插件的codepen。

https://codepen.io/stephendesjardins/pen/jZZozK

当我点击div框时。我希望它找到他的.dot div并添加类“haya”。

由于一些奇怪的原因,它将它添加到第二个框而不是第一个框。

他们希望我添加更多详细信息以发布此帖子。所以我想,我可以说我在github上找到了插件模板。

 /*!
 * jQuery lightweight plugin boilerplate
 * Original author: @ajpiano
 * Further changes, comments: @addyosmani
 * Licensed under the MIT license
 */

// the semi-colon before the function invocation is a safety
// net against concatenated scripts and/or other plugins
// that are not closed properly.
;(function ( $, window, document, undefined ) {

    // undefined is used here as the undefined global
    // variable in ECMAScript 3 and is mutable (i.e. it can
    // be changed by someone else). undefined isn't really
    // being passed in so we can ensure that its value is
    // truly undefined. In ES5, undefined can no longer be
    // modified.

    // window and document are passed through as local
    // variables rather than as globals, because this (slightly)
    // quickens the resolution process and can be more
    // efficiently minified (especially when both are
    // regularly referenced in your plugin).

    // Create the defaults once
    var pluginName = "defaultPluginName",
        defaults = {
            propertyName: "value"
        };

    // The actual plugin constructor
    function Plugin( element, options ) {
      console.log(element);
        that = this;
        this.element = element;

        // jQuery has an extend method that merges the
        // contents of two or more objects, storing the
        // result in the first object. The first object
        // is generally empty because we don't want to alter
        // the default options for future instances of the plugin
        this.options = $.extend( {}, defaults, options) ;

        this._defaults = defaults;
        this._name = pluginName;

        this.init();
    }

    Plugin.prototype = {

        init: function() {
            // Place initialization logic here
            // You already have access to the DOM element and
            // the options via the instance, e.g. this.element
            // and this.options
            // you can add more functions like the one below and
            // call them like so: this.yourOtherFunction(this.element, this.options).

          $(this.element).on('click', function(){
            $(this).addClass('bleh');
            $(that.element).find('.dot').addClass('haya')
          })
        },

        yourOtherFunction: function(el, options) {
            // some logic
        }
    };

    // A really lightweight plugin wrapper around the constructor,
    // preventing against multiple instantiations
    $.fn[pluginName] = function ( options ) {
        return this.each(function () {
            if (!$.data(this, "plugin_" + pluginName)) {
                $.data(this, "plugin_" + pluginName,
                new Plugin( this, options ));
            }
        });
    };

  })( jQuery, window, document );

  $('.box').defaultPluginName();

  $('.box2').defaultPluginName();

1 个答案:

答案 0 :(得分:1)

$(that.element).find('.dot').addClass('haya')定位第二个父div。将$(this).find('.dot').addClass('haya')更改为{{1}}