将 CSS 类添加到数组中的单个元素
Add a CSS class to a single element in an array
我正在尝试在按下该字符时将一个类添加到数组元素中,这是一个特定的字符。预期的结果是,如果按下键"y",类"selected"将仅添加到数组中的"y"中,这将改变它的颜色并在它之间划一条线。
我设置了一个按键事件,我可以将类添加到整个div 中,其中数组已在按键时附加,但我无法弄清楚如何在该字符的按键时将类添加到数组中的单个元素。
<小时 />我的JS代码:
var $arr = "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ".split("");
$('#characters').append($arr);
$(document).keypress(function(event) {
var pressed = event.keyCode;
var alreadyPressed = [];
var pressedChar = String.fromCharCode(pressed);
console.log(pressedChar, pressed);
for (i = 0; i <= $arr.length; i++) {
var arrCharacter = $arr[i];
if((arrCharacter === pressedChar) && (jQuery.inArray(pressed, alreadyPressed) === -1)) {
$(this).addClass("selected");
alreadyPressed.push(pressed);
}
}
})
这里也是一个小提琴。
var $arr = "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 ".split("");
$.each($arr, function(index,elem){
console.log(elem);
$('#characters').append("<span id='"+elem+"'>"+elem+"</span>");
});
//$('#characters').append($arr);
$(document).keypress(function(event) {
var pressed = event.keyCode;
var alreadyPressed = [];
var pressedChar = String.fromCharCode(pressed);
console.log(pressedChar, pressed);
for (i = 0; i <= $arr.length; i++) {
var arrCharacter = $arr[i];
if((arrCharacter === pressedChar) && (jQuery.inArray(pressed, alreadyPressed) === -1)) {
$("#"+pressedChar).addClass("selected");
alreadyPressed.push(pressed);
}
}
})
将它们包装在一个范围中,为它们提供一个唯一的键来查找键,然后在选择器中使用该键来选择元素。
var arr = "abcdefghijklmnopqrstuvwxyz0123456789".split("");
var html = arr.reduce( function (str, txt) { return str + '<span data-id="' + txt + '">' + txt + '</span>' }, "");
$("#out").html(html);
$(window).on("keypress", function(evt) {
var strChar = String.fromCharCode(evt.which).toLowerCase();
$('span[data-id="' + strChar + '"]').addClass("selected");
});
.selected {
color: green;
background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="out"></div>
问题:
- 只有 jQuery 对象具有方法
.addClass()
,您尝试从字符串调用它。您需要将每个字母作为一个类分配给单个元素。 - 在你的例子中,.split() 里面必须有一个空格:
.split(" ")
我会
做什么:
- 将所有字母放在单独的
<span>
元素中 - 按字母键时将所选类添加到相应的
<span>
元素
查看下面的演示,了解最佳实现。
演示
var arr = "abcdefghijklmnopqrstuvwxyz0123456789".split("");
var $characters = $('#characters');
var alreadyPressed = [];
$.each(arr, function(key, value){
$characters.append("<span id='span" + value + "'>" + value + "</span>");
});
$(document).keypress(function(event) {
var pressedChar = String.fromCharCode(event.keyCode);
if($.inArray(pressedChar, arr) !== -1 && $.inArray(pressedChar, alreadyPressed) === -1) {
$("#span" + pressedChar).addClass("selected");
alreadyPressed.push(pressedChar);
}
});
.container {
color: gray;
}
#characters {
font-size: 30px;
}
.selected {
color: orange;
text-decoration: line-through;
}
[id^=span] {
padding-right: .4em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="container">
<h1>Superfun Typing Game </h1>
<p>To win, type every letter from a-z and every number from 0-9.</p>
<div id="characters"></div>
</div>
(另见这首小提琴)
你这里的逻辑有点缺陷。将每个字符附加到其自己的span
元素中会简单得多,以便在按下按键时可以轻松找到它。您还可以使用类在按键时标识 span
元素,而不必维护单独的数组。这允许您直接使用 DOM 来维护状态,而不必跟踪该数组已按下和未按下的内容。因此,您可以通过将字符跨度的总数与具有selected
类的字符跨度的数量进行比较来轻松判断何时按下了所有键。
考虑到所有这些,请尝试以下操作:
var charArr = 'abcdefghijklmnopqrstuvwxyz0123456789'.split('');
var charHtml = '';
for (var i = 0; i < charArr.length; i++) {
charHtml += '<span class="char_' + charArr[i] + '">' + charArr[i] + '</span>';
}
$('#characters').append(charHtml);
$(document).keypress(function(e) {
var $characters = $('#characters span');
$characters.filter('.char_' + String.fromCharCode(e.which)).addClass('selected');
if ($characters.length == $characters.filter('.selected').length) {
alert('All selected!');
}
})
工作小提琴
相关文章:
- 如何创建具有单个元素或元素数组的数组
- 扩展验证.js并验证单个元素
- <noscript>标记单个元素或类似的东西
- 在javascript中阻止文档执行默认操作时,在单个元素中使用默认事件
- 从单个元素中Jquery关闭事件
- 为什么 .data() 适用于一组元素,但不适用于单个元素
- 将 CSS 类添加到数组中的单个元素
- 当文档中的单个元素准备就绪时触发事件的最佳方法
- 将多种颜色应用于谷歌图表中的单个元素
- jQuery each - 绑定到所有元素而不是单个元素
- 当无法使用 $(this) 时,目标单个元素
- 如何将样式应用于类的单个元素,同时从同一类的前一个元素中删除样式
- 单个元素的多个单击处理程序
- 动态挖空模板仅接受单个元素而不是数组
- 在对象中的单个元素上使用jQuery .append
- 当来自不同页面时,如何显示/隐藏单个元素
- 在单个元素上使用fancybox时,如何对其进行分组
- 在单个元素上跟踪多个GA事件
- 当通过jQuery插入DOM时,什么时候应该将HTML字符串包装在单个元素中
- AngularJS-如何从嵌套数组中获取单个元素