【问题标题】:jQuery - If hasClass but for multiple elementsjQuery - 如果 hasClass 但对于多个元素
【发布时间】:2018-07-20 19:31:30
【问题描述】:

这有点难以解释,但这里没什么:

我的 .wrapper 包含 50 个没有点击事件的元素。

在另一个地方,我随机加载了 50 个元素中的 5 个。

现在我要做的是查看出现了哪些 5 个随机元素,以便我可以将它们变成 .wrapper 中的点击对象。

例如,这是带有元素的包装器:

<div class="wrapper">
  <div class="object1"></div>
  <div class="object2"></div>
  <div class="object3"></div>
  <div class="object4"></div>
  <div class="object5"></div>
  <div class="object6"></div>
  <div class="object7"></div>
  <div class="object8"></div>
  <div class="object9"></div>
  <div class="object10"></div>
  <!-- and so on -->
</div>

这是随机容器:

<div class="random">
  <div class="object7"></div>
  <div class="object9"></div>
  <div class="object5"></div>
  <div class="object6"></div>
  <div class="object1"></div>
</div>

我已经尝试过这样的方法并且它有效,但它只适用于我调用的第一个,此外,必须有更好的方法。

if ($('.random div').hasClass(".object1")){
  $(".wrapper .objects1").on("click", function() {
    // do things
  });
}

if ($('.random div').hasClass(".object2")){
  $(".wrapper .objects2").on("click", function() {
    // do things
  });
}

if ($('.random div').hasClass(".object3")){
  $(".wrapper .objects3").on("click", function() {
    // do things
  });
}

// and so on (until 50...)

【问题讨论】:

  • 你是如何在random div 中加载这些元素的,它们是从wrapper div 中移出的,当你说你想绑定click event 时,你想对它们执行单独的操作吗?单击时全部执行,还是执行类似操作?

标签: jquery random elements


【解决方案1】:

您可以选择所有随机 div,然后获取它们的类并选择包装器内的 div。创建一个包含点击处理程序的映射对象。您可以通过传递类来获取特定的点击处理程序。

如果它们是唯一的,您应该使用而不是 id。

var clickHandlers = {
    object7: function(e) {
        // do things for 7
    },
    object8: function(e) {
        // do things for 8
    },
    ...
};

var randomDivs = $('.random div');
$.each(randomDivs, function(index, randomDiv) {  
  var divClass = randomDiv.className;
  var wrapperDiv = $('.wrapper .'+divClass);
  wrapperDiv.on('click', clickHandlers[divClass]);
});

【讨论】:

  • 您不应该根据假设回答问题,或者您应该提供满足所有方面的解决方案。
  • 这是一个非常好的方法,但不幸的是他们都做不同的事情:/
  • 我想这可能是它。稍后我将不得不对其进行检查,但这是正确的答案。感谢您的帮助!
【解决方案2】:

这些对象真的需要在不同的类中吗?如果结构看起来像这样会怎样:

<div class="wrapper">
  <div class="object" id = "obj1"></div>
  <div class="object" id = "obj2"></div>
  <div class="object" id = "obj3"></div>
  <!-- and so on -->
</div>

然后您可以像这样在随机 div 中使用类“object”遍历每个 div:

$('.random div').children(".object").each(function(i, obj) {
    //do things with each object
    //i is the index in the array of children with class object
    //obj is current object in the list

});

【讨论】:

  • 我可能会,但你能详细解释一下吗?我不确定您所说的迭代是什么意思?重要的是每个 div 都匹配包装器中的相同 div
猜你喜欢
  • 2023-03-12
  • 2020-04-13
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2023-03-20
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多