javascript - 如何使 javascript 适用于元素列表?
问题描述
我想在浏览器中翻转卡片。这些元素使用 Django 循环模板呈现。我可以翻转第一张牌,但不能翻转其余的牌。我希望他们单独翻转。
这是html:
{% for element in elements %}
<div class="outer">
<div class="inner">
<div class="card-back">
<span>{{ content }}</span>
</div>
<div class="card-front">
<span>{{ content }}</span>
</div>
</div>
</div>
{% endear %}
这是javascript:
# works for the first element
var card = document.querySelector('.inner');
card.addEventListener( 'click', function() {
card.classList.toggle('is-flipped');
});
# this function seems to break things
function() {
var cards = document.querySelectorAll(".inner");
for ( var i = 0, len = cards.length; i < len; i++ ) {
var card = cards[i];
clickListener(card);
}
});
解决方案
根据Mozilla 文档,document.querySelector()
返回一个Element
对象,该对象表示与指定的 CSS 选择器集匹配的第一个元素,或者null
如果没有匹配项则返回。
这就是为什么它只适用于第一个元素。
如果你想在所有元素上应用这个,你可以使用 jQuery 并在页面完全加载时注册事件。
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js">
<script>
$(document).ready(function()
{
$(".inner").on('click', function(event)
{
var card = event.target;
card.classList.toggle('is-flipped');
});
});
</script>
</head>
重要提示:您不需要带有for
循环的函数,因为每当添加新元素时,jQuery 都会自动应用 click 事件。
推荐阅读
- ios - 在没有 IF 语句的情况下滑动时显示和隐藏 UIView?
- ckeditor - CK Editor 默认字体系列和字体大小
- javascript - 谷歌地图不适用于 HTTP
- doctrine-orm - Symfony 巨大的日期时间对象,在时区有数百个转换
- c - 在没有 Internet 访问的情况下将头文件安装到 linux 机器上
- java - 如何简化填写始终具有相同内容的表单?
- angular - email.invalid 在 angularmaterial 中不起作用
- ssl - curl证书验证失败
- unity3d - OnTriggerExit 持续时间比正常时间长?
- fork - 请有人解释一下,B行中循环的目的(及其wait())是什么?