简体   繁体   English

精简代码以选择性地切换列表项

[英]Streamlining code for selective jQuery toggling of list items

I'm trying to make a quiz powered by PHP and jQuery. 我正在尝试通过PHP和jQuery进行测验。 Below is an example of my HTML: 以下是我的HTML的示例:

<ul class="Answers UL1">
  <li class="Answer A"></li>
  <li class="Answer B"></li>
</ul>
<ul class="Answers UL2">
  <li class="Answer A"></li>
  <li class="Answer B"></li>
</ul>

<script>
$(document).ready(function(){
  $(".UL1 li.A").click(function(){
    $(".UL1 li.A").toggleClass("selected");
});
});
</script>

If someone clicks on the first list item (li.A) in the first question (ul.UL1), the class "selected" will be appended to that item... 如果有人单击第一个问题(ul.UL1)中的第一个列表项(li.A),则“选择的”类将附加到该项...

<li class="Answer A selected"></li>

However, I want to display all ten questions and the associated answers simultaneously. 但是,我想同时显示所有十个问题和相关的答案。 That means I'd have to write 40 JS scripts to cover each possible combination... 这意味着我必须编写40个JS脚本来涵盖每种可能的组合...

<script>
$(document).ready(function(){
  $(".UL1 li.A").click(function(){
    $(".UL1 li.A").toggleClass("selected");
});
});

// 38 similar scripts in between!

$(document).ready(function(){
  $(".UL10 li.D").click(function(){
    $(".UL10 li.D").toggleClass("selected");
});
});
</script>

I just wondered if there's some way to condense or streamline my code, using PHP, jQuery or CSS. 我只是想知道是否存在使用PHP,jQuery或CSS压缩或简化代码的方法。

Please try this class assignment instead: 请尝试以下课堂作业:

<ul class="Answers UL">
  <li class="Answer A"></li>
  <li class="Answer B"></li>
</ul>
<ul class="Answers UL">
  <li class="Answer A"></li>
  <li class="Answer B"></li>
</ul>

Then the following script (only one) should be enough to cover the situation: 然后,以下脚本(仅一个)应该足以解决这种情况:

<script>
$(document).ready(function(){
  $(".UL li").click(function(){
    $(this).toggleClass("selected");
});
});
</script>

Here is a simple JS Fiddle to show this working (I hope the way you needed). 这是一个简单的JS小提琴,用于演示此工作方式(希望您采用所需的方式)。

I hope this helps in any way. 我希望这会有所帮助。

This is how I would do it 这就是我会做的

HTML 的HTML

<ul class="Answers">
    <li class="1-A" id="1">1 A</li>
    <li class="1-B" id="1">1 B</li>
</ul>
<ul class="Answers">
    <li class="2-A" id="2">2 A</li>
    <li class="2-B" id="2">2 B</li>
</ul>

JS JS

$(".Answers li").click(function () {
    $("." + this.id + "-A").removeClass("selected");
    $("." + this.id + "-B").removeClass("selected");
    $(this).addClass("selected");
});

JSFIDDLE http://jsfiddle.net/w7x1hgq3/4/ JSFIDDLE http://jsfiddle.net/w7x1hgq3/4/

Updated 更新

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

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