javascript - 在 JavaScript 中使用 For of Loop 创建和突出显示元素
问题描述
我们如何在循环中创建元素?我有职位,在页面加载时,我想通过换行来突出显示这些职位上的单词标签。下面是我的代码
function highlight(element,st,en){
range = document.createRange();
start = st;
end = en;
dig(element);
s.addRange(range);
}
for (x of data) {
var nameArr = jsondata.split(',');
var a = nameArr[0];
var b = nameArr[1];
highlight($('.main-detail-content'), a, b);
var ra = s.getRangeAt(0);
var newNode = document.createElement("em");
newNode.appendChild(ra.extractContents());
ra.insertNode(newNode);
}
它只突出显示一个单词,但在循环中,我有 4 条记录。帮助将不胜感激。
解决方案
数据是一个数组,如:
[
"162,170",
"83,91"
]
看起来您在滥用for (x of data)
循环,因为您从未使用 x 变量。
您应该执行以下操作:
//need a counter like variable to look at a different selection at every loop
var selectionIterator = 0;
for (var x of data) {
var nameArr = data[x].split(',');
console.log('when x is', x);
console.log('nameArr is', nameArr);
var a = nameArr[0];
var b = nameArr[1];
highlight($('.main-detail-content'), a, b);
//now it's looking at the last selection every time
var ra = s.getRangeAt(selectionIterator++);
var newNode = document.createElement("em");
newNode.appendChild(ra.extractContents());
ra.insertNode(newNode);
}
这样,循环的每次迭代中的 nameArr 都会更改为对象中的下一个元素,我已经插入了一些控制台日志,可以帮助您进行调试
编辑:通过查看您的日志,看起来现在它正在正确地迭代数据数组。
此外,它仅突出显示第一个单词,因为您仅在您正在执行的第一个选择中添加新节点,var ra = s.getRangeAt(0);
而不是硬编码 0,您应该每次递增计数器,这就是我引入selectionIterator
变量的原因。
这不是最优雅的解决方案,但它应该可以完成工作
推荐阅读
- python - Pygears 如何将接口修复为某个值?
- amazon-web-services - Athena 在使用 AWS Glue 表时产生奇怪的结果
- swiftui - SwiftUI presentationMode.wrappedValue.dismiss() 弹回根目录
- java - 尽管没有更改,但禁用电池优化的权限仍然出现在 Android API 28 上
- c# - 如何使一个布尔值可以跨多个 .cs 文件访问
- lazy-loading - Is there a way to get a border around image with Lazy Load plugin?
- xamarin.ios - 我可以只为特定部分更改标签的色调颜色和字体属性吗?
- javascript - 在 VS Code 菜单栏中添加菜单
- javascript - 超时后如何将按钮恢复到原始状态
- c++ - c++ 代码在 Linux 中的行为与 Windows 不同?