繁体   English   中英

仅当元素具有两个特定类时如何在元素上触发函数

[英]How to trigger a function on an element only when it has two specific classes

我有这段代码可以通过将所有“img data-src”更改为“img src”来延迟图像加载。

function init() {
var imgDefer = document.getElementsByTagName('img');
for (var i=0; i<imgDefer.length; i++) {
if(imgDefer[i].getAttribute('data-src')) {
imgDefer[i].setAttribute('src',imgDefer[i].getAttribute('data-src'));
} } }
window.onload = init;

目前它在页面加载时触发。 我想要的是它仅在元素同时具有 .lazy 和 .show 类时触发

所有元素都如下所示:

<li class="lazy hidden baratheon packcore" data-filtertext="01048"><a><div><img data-src="img/01048.jpg" class="cardimg"></div></a></li>

.hidden 被分配了 display:none,.show 有 display:block,并且有各种点击将 .addClass 'show' 和 .removeClass 'hidden'。

我玩过各种组合

$( 'lazy, .show' ) (function () {

但我清楚地理解甚至比我想象的还要少,无法让它发挥作用。

当一个元素存在两个特定类时,如何触发函数 - 并将该函数仅应用于这些元素?

最好将它作为一个单独的脚本来寻找这两个类,还是将它包含在 .addclass 'show' 脚本中以便在添加 .show 时自动运行?

编辑:更正了 li 代码以显示 data-src 而不仅仅是 src

检查类..

 window.addEventListener("DOMContentLoaded",f); function f(){ var i = document.body.childNodes; for(var k=0;k < i.length; k++){ var e = i[k]; if(typeof e.className === 'undefined') continue; if((e.className.indexOf("a") > -1) && (e.className.indexOf("b") > -1)) { e.style.backgroundColor = "red"; } } }
 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> </head> <body> <input type="text" class="a" placeholder="Only a class"> <input type="text" class="ab" placeholder="a class and b class"> </body> </html>

使用 jQuery each() 函数遍历您的 .lazy.show 列表项。 然后对于每一个,找到子图像并将 src 设置为 data-src 中的值:

  $(".lazy.show").each(function(idx){    
    var $img = $(this).find("img");
    var src = $img.data("src");
    $img.prop("src", src);
  });

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM