多个 类 带条件语句

multiple classes with conditional statement

我的代码中有多个 类,大约是这里的 10 倍,还有几个 类 在单击时具有相同的目的。 我很少在 javascript 中编写代码,我想要的只是一种比我在代码中得到的更好的方法来实现这一点。

$(document).ready(function() {
  $(".item1, .item2, .item3").click(function(event) {
    var myClass = $(this).attr("class");
     if (myClass === "item1"){
    document.write("Option 1"); // do something else
    }
    else if (myClass === "item2"){
    document.write("Option 2"); //do something else
    }
    else if (myClass === "item3"){
    document.write("Option 3"); // same thing as option 1
    }
    else document.write("Incorrect");
  });
  })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div class="item1">item 1</div>
<div class="item2">item 2</div>
<div class="item3">item 3</div>
</body>
</html>

一个选项是拥有一个持久对象,其属性是 class 名称,值是每个 class 名称的关联文本 - 它非常简洁,添加更多选项是微不足道的,您只需要定义键值对:

const classOptions = {
  item1: 'Option 1',
  item2: 'Option 2',
  item3: 'Option 3',
};

$(".item1, .item2, .item3").click(function(event) {
  const optionText = classOptions[$(this).attr("class")];
  document.write(optionText || 'Incorrect');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item1">item 1</div>
<div class="item2">item 2</div>
<div class="item3">item 3</div>

此外,如果可能的话,您可能会发现在项目的 父级 上放置一个点击处理程序比 $(".item1, .item2, .item3").click 更容易 - 这样,您不必在选择器中写出每个 class 名称,如果您有大量 classes:

,这将是一件很痛苦的事情

const classOptions = {
  item1: 'Option 1',
  item2: 'Option 2',
  item3: 'Option 3',
};

$(".container").click(({ target }) => {
  const optionText = classOptions[$(target).attr("class")];
  document.write(optionText || 'Incorrect');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="item1">item 1</div>
  <div class="item2">item 2</div>
  <div class="item3">item 3</div>
</div">

您是否要查看从组中点击了哪个项目?

我认为这种方法是错误的,无论是 HTML 结构还是 DOM 和 Javascript 的逻辑。 您可以将项目 (HTML) 放在父级中,然后在父级上使用 event delegation

然后根据点击的元素勾选选项。

$("#parent").click( function(event) {

    var elementClass  = event.target.className,
        $output       = $("#output");

    //  NOTE: We asume that the Element has one class
    switch (elementClass) {
      case "item1":
        $output.text("Option 1");
        break;
      case "item2":
        $output.text("Option 2");
        break;
      case "item3":
        $output.text("Option 3");
        break;
    }

});
#parent > * {
  width : 100px;
  height : 100px;
  display : inline-block;
  background : red;
}

#parent > div:not(:first-of-type) {
  margin-left : 20px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div id="parent">
  <div class="item1"></div>
  <div class="item2"></div>
  <div class="item3"></div>
</div>

<br>
<div id="output"></div>