我想在“ div”中用红色突出显示该单词,如果没有从输入中正确输入,请按空格键,如果正确则按绿色。在我的实现中,出现错误:“未捕获的ReferenceError:未定义”
var arr = [];
var i = 0;
window.onload = function () {
var text = document.getElementById("text");
txt = text.textContent || text.innerText;
arr = txt.split(' ');
console.log(arr);
//alert(txt.substring(0,3));
};
function getChar(e) {
if (event.which == 32) {
if (e.value == arr[i]) {
i++;
document.getElementById('form').reset();
event.preventDefault();
}
}
}
<div id="text">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias aperiam commodi
consequatur corporis cum dolores eaque in labore molestias nam odio optio quas, quis voluptates!
Architecto fuga impedit voluptatum.
</div>
<form action="" id="form">
<input type="text" id="text_input" onkeydown="getChar(this);">
</form>
答案 0 :(得分:1)
很多与您的代码不兼容。
addEventListener
-这使您能够通过JavaScript代码管理侦听器,并且还可以将多个事件添加到同一元素。它还使您能够使用事件委派之类的奇特功能,在某些情况下可以节省您的时间。这样做是100%的改进,否则任何人说的都是新的或疯狂的。 i
遍历数组。这意味着您不能在代码开头将其声明为0,而只要在按下空格键时就将其递增即可。DocumentFragment
,听起来就是这样。您可以在页面的大块后面添加元素和文本,然后立即在DOM上添加所有内容。 e.which
已过时。 e.key
是新标准。除了检查代码外,我们通常可以检查特定的关键字符。
selected
类添加到此文本。这里没有删除该类的代码,因为这是一个很大的问题,所以我不打算提供它。 您要问的范围比我想像的要大得多,并且比我想像的要大得多,因此,我为您提供了足够的代码以使您开始使用有效的荧光笔,但是不断变化其他跨度到另一种颜色完全取决于您,因为我觉得在此示例中我已经展示了很多。如果您不理解它,请继续努力,一定会得到它。
var arr = [];
window.onload = function() {
var text = document.getElementById("text");
arr = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusantium alias aperiam commodi consequatur corporis cum dolores eaque in labore molestias nam odio optio quas, quis voluptates! Architecto fuga impedit voluptatum.".split(' ');
text.appendChild(wrapWithSpans(arr));
var textbox = document.getElementById("text_input");
textbox.addEventListener("keydown", function(e) {
getChar(e)
});
};
function wrapWithSpans(arr) {
let df = document.createDocumentFragment();
arr.forEach(node => {
let span = document.createElement("span");
span.textContent = node + " ";
df.appendChild(span);
});
return df;
}
function getChar(e) {
let text = document.querySelector("#text"),
spans = Array.from(text.querySelectorAll("span"));
if (e.key == " ") {
for (let i in arr) {
if (e.currentTarget.value == arr[i]) {
spans.find(function(node) {
return node.textContent.slice(0, -1) == arr[i];
}).classList.add("selected");
document.getElementById('form').reset();
event.preventDefault();
}
}
}
}
.selected {
color: green;
}
<div id="text">
</div>
<form action="" id="form">
<input type="text" id="text_input">
</form>
答案 1 :(得分:0)
正如错误所暗示的那样,在使用它之前您实际上并没有定义i-确保在将其用作索引之前进行定义,例如只需在循环之前编写i=0
。