我无法在回调中的元素上运行方法

时间:2019-10-07 11:27:06

标签: javascript jquery callback

由于img元素不支持伪类,因此我在lazyload加载图像之前临时添加了背景色,因此我选择了在其之前使用具有相同尺寸的跨度,并为其设置了最主要的背景色图像的颜色。加载图像后,我需要能够隐藏该范围,但似乎无法访问回调中的其他dom元素。我正在使用verlok / lazyload

因此对于回调函数(el),我试图像el.before()这样先获取元素,但是我收到一条错误消息,提示“ before不是函数”

HTML

<span class="img_overlay" style="width:100px;height:100px;background:#cccccc"></span>

<img class="card-img-top" data-src="URL_TO_IMG">    

JS

   var lazyLoadInstance = new LazyLoad({
    elements_selector: "[data-src], [data-bg]",
    load_delay: 1000,
    callback_loaded: function(el) {
        if(el.before().hasClass('img_overlay')) {
                        el.closest('.img_overlay').addClass('class_name');
        }
    },
});

如果我将'el'记录为字符串,则会得到img元素,我希望它是一个dom元素。帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果el是dom元素,则需要将其变成jQuery对象才能使用jQuery方法

此外,由于before()是插入方法,因此,用于定位先前同级的正确方法是prev()

尝试类似的东西:

callback_loaded: function(el) {
  var $prev = $(el).prev();
  if ($prev.hasClass('img_overlay')) {
    $prev.addClass('class_name');
  }
},