javascript - 删除序列中jquery创建的元素

标签 javascript jquery html

我正在尝试使用 jquery 构建我的第一个插件。

到目前为止很成功,但我一直在删除通知。

我能够删除有关点击事件的通知。

Notification.prototype.destroy = function(element) {
    var self = this;

    element.closest('.notification-container').remove();
};

我在 init 方法中调用该函数。

Notification.prototype.init = function() {
    var self = this;

    self.$el.on('click', function() {
        self.build();
    });

    self.$body.on('click', '.close', function() {
        self.destroy(this);
    })
};

现在我想为用户提供一个自动关闭选项,并且我想到使用 setTimeout 函数,但是当我创建了将参数作为当前元素传递的函数时,我无法获取。

这是pen .

任何帮助将不胜感激。

谢谢!

最佳答案

您遇到了几个问题:

  1. setTimeout 函数必须在显示时调用(而不是在构建时调用),否则甚至可以在显示通知之前调用它(因此您的通知不会自动删除)。
  2. 当您调用 setTimeout 来销毁通知时 - 您需要传递刚刚创建的通知的容器,以便销毁函数能够找到要删除的相关元素(当您使用 click 选项时 - 您传递 X 元素,因此很容易找到最近的容器,但是当您使用 setTimeout 时必须自己传递容器元素)。

我认为我所做的所有更改都在 build 函数中,如下:

Notification.prototype.build = function() {
    var self = this;

    var closeHTML = self.options.autoClose ? '' : '';

    if (self.options.type == 'thumb') {
        var $notificationHTML = $('<div class="notification-container">' +
                                    '<i class="close">x</i>' + 
                                    '<div class="notification">' +
                                        '<div class="thumb-container">' +
                                            '<img src="' + self.options.src + '">' +
                                        '</div>' +
                                        '<p>' + self.options.text + '</p>' +
                                    '</div>' +
                                '</div>');
    } else {
        var $notificationHTML = $('<div class="notification-container">' +
                                '<i class="close">x</i>' + 
                                '<div class="notification ' + self.options.style + '">' +
                                    '<p>' + self.options.text + '</p>' +
                                '</div>' +
                            '</div>');

    }
    self.$body.prepend($notificationHTML);
    if(self.options.autoClose) {
        setTimeout(function() {
            self.destroy($notificationHTML);
        }, 5000)
    } else {
        self.$body.on('click', '.close', function() {
            self.destroy(this);
        })
    }
};

还有一个可用的代码笔: http://codepen.io/anon/pen/JKgPgB?editors=0010

关于javascript - 删除序列中jquery创建的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167927/

相关文章:

javascript - 使用对象正确替换全局变量

javascript - HTML 表单 onclick 事件不调用 javascript 函数

php - 在具有特定类的每个元素后面添加 div

html - 从 CSS 滤镜制作真正的 SVG feDropShadow 阴影 :drop-shadow()?

html - 包装 div 之外的背景图像,位于页面底部

javascript - vue js中登录成功后如何重定向到dashboard组件页面(登录组件)?

javascript - 空 Node.js/Express 响应

jquery - 如果文本超出一定宽度自动添加 "...",但在悬停时显示?

jquery - jQuery 中 prop() 和 attr() 的区别以及何时使用 attr() 和 prop()

具有 height 属性 100% 的 html 元素不会覆盖整个窗口