对于简单的文本分割,您的代码是接近的(在HTML上分割是另一回事). 单词可以拆分为一个简单的字符串:
var words = fullList.innerHTML.split(" - ");
Edit:更新代码片段以显示如何使用.map构建HTML
将单词提取到一个数组中(使用原始的或使用jquery更新的代码片段),然后在数组上使用.map来删除数组的每个元素,并为该数组元素返回一个新的字符串(html). 这将返回一个新的字符串数组(在本例中). 然后你用分隔符.join()
这个数组来恢复原始的"-".
var html = words.map((e) => `<span>${e}</span>`).join(" - ");
每隔几秒钟高亮显示一个随机单词:
更新的代码片段:
let words = $("#highlight-list").text().split(" - ");
let html = words.map((e) => `<span>${e}</span>`).join(" - ");
$("#highlight-list").html(html);
setInterval(() => {
let spans = $("#highlight-list > span");
spans.removeClass("highlight");
let index = Math.floor(Math.random() * spans.length);
//console.log(index, spans.length);
spans.eq(index).addClass("highlight");
}, 1500);
#highlight-list > span { border:1px solid rebeccapurple; }
.highlight { color: white; background-color: rebeccapurple; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="highlight-list">XXX - YYY - ZZZ</div>
I've used jquery simply for convenience and as you had it tagged in the question. You shouldn't normally mix vanilla-js / jquery like this, but I didn't want to change your original too much.
以下是一些注意事项:
- 将1500更改为您想要的任何间隔(以毫秒为单位)-对于演示/测试,更容易将其保持在较低的水平
- 由于只有3个单词,random()调用每次有1/3的机会得到相同的单词(这是相当高的). 您可以存储现有的span,如果相同,则获取不同的索引
- 当它两次 Select 相同的数字时,只需在那里显示console.log