jquery - 切换元素,如果第一次单击切换该 div 内的所有元素
问题描述
将每个 div 想象成您手中的一张牌,您必须选择要玩的牌。
我无法更改组类名称或元素类名称。
规则:
- 如果一个元素点击它的切换他的位置<--左/右-->
- 如果该组的第一个元素单击了该组中的所有元素,则该组中的所有元素都向右 -->
- 如果该组中的所有元素都已经在右侧,并且单击的第一个元素只是第一个元素向左
我的代码有效,但仅适用于一组,不适用于 2-3-4 组...
$('.carta:first').click(function() {
if ($('.isOut').length < $('.carta').length) {
$('.carta').addClass('isOut');
} else {
$(this).removeClass('isOut');
}
})
$('.carta:not(:first)').click(function() {
$(this).toggleClass("isOut");
})
body {
background: grey;
}
.carta {
background: blue;
width: 50%;
height: 50px;
margin-left: 0%;
}
.isOut {
margin-left: 30%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class=gruppo name=team[]>
<div class="carta">1 first</div><br>
<div class="carta">1</div><br>
<div class="carta">1</div>
</div><br>
<hr>
<br>
<div class=gruppo name=team[]>
<div class="carta">2 first</div><br>
<div class="carta">2</div><br>
<div class="carta">2</div><br>
<div class="carta">2</div><br>
</div>
在这里摆弄:http: //jsfiddle.net/3mejdq4y/
解决方案
要使这适用于各个组,您需要更改选择器,使它们与 target 相关.gruppo
,而不是与所有.carta
和isOut
元素相关。为此,请使用closest()
获取对父元素的引用,然后find()
在其中引用。
另请注意,:first
需要更改为:first-child
,因为您需要针对每个容器中的第一个元素,而不是第一个整体。
尝试这个:
$('.carta:first-child').click(function() {
let $container = $(this).closest('.gruppo');
if ($container.find('.isOut').length < $container.find('.carta').length) {
$container.find('.carta').addClass('isOut');
} else {
$(this).removeClass('isOut');
}
})
$('.carta:not(:first-child)').click(function() {
$(this).toggleClass("isOut");
})
body {
background: grey;
}
.carta {
background: blue;
width: 50%;
height: 50px;
margin-left: 0%;
}
.isOut {
margin-left: 30%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="gruppo" name="team[]">
<div class="carta">1 first</div><br>
<div class="carta">1</div><br>
<div class="carta">1</div>
</div><br>
<hr>
<br>
<div class="gruppo" name="team[]">
<div class="carta">2 first</div><br>
<div class="carta">2</div><br>
<div class="carta">2</div><br>
<div class="carta">2</div><br>
</div>
另请注意,您使用的 jQuery 版本 1.11.0 已超过 6 年,应该更新。
推荐阅读
- python - 定义一个用于定位两种类型 trs 的选择器时遇到问题
- python - 通过for循环构建dict而不重复
- laravel - 使用 Laravel 路由器主宰 vue 路由器
- python - 如何提取以 phone 开头并以 } 结尾的短语
- javascript - 按特定顺序对名称数组进行排序
- go - 多包go模块中的名称解析问题
- amazon-s3 - Terraform 无法从远程状态读取
- react-native - Viro -React 应用程序是独立应用程序吗?
- c++ - 如何运行 JavaScript 文件 - V8
- angular - node_modules/rxjs/Subject"' 没有导出的成员 'Subject'