javascript - 无法访问属性“color”,icon.style 未定义
问题描述
我无法更改任何样式属性边框、颜色等,为什么?我总是得到:
未捕获的类型错误:无法访问属性“颜色”,icon.style 未定义
<!-- this element is created multipleTimes by loop -->
<li class="list-group-item">
<span>
<input class="input_Text" data-verb="<%= data %>" type="text">
<i class="fas fa-check checkIcon" ></i>
</span>
</li>
let check = document.querySelectorAll('.input_Text')
/* 这里 */
var icon = document.querySelectorAll('.checkIcon');
check.forEach(element => element.addEventListener('input',(e)=>{
var data = element.getAttribute('data-verb').toString();
var value = e.target.value;
if (value == ""){
element.style.border = "1px solid blue";
element.style.color = "black";
}
else if (data.startsWith(value)){
element.style.border = "5px solid green";
element.style.color = "green";
}
else{
element.style.border = "5px solid red";
element.style.color = "red";
}
<!-- HERE -->
value == data?icon.style.color = "green" : null;
}));
解决方案
这是因为icon
querySelectorAll 不是元素本身(请参阅下文如何返回单个元素)。
它返回一个与 Array 非常相似的NodeList 。要执行您想要的操作,您需要获取此列表返回的第一个节点。一些方法可以做到这一点:
// Deconstructing it as an array, I'm not sure if you can really do this with a NodeList, should be tested
var [icon] = document.querySelectorAll('.checkIcon');
// Get item x where x is the index (in your case, 0, the first element)
var icon = document.querySelectorAll('.checkIcon').item(0);
// This is valid syntax, same as .item()
var icon = document.querySelectorAll('.checkIcon')[0];
获取单个元素本身
或者,如本答案评论中所述,您可以使用 Document's .querySelector()
API直接选择元素
参考:
- NodeList 的.item()
- 文档的.querySelectorAll()
推荐阅读
- node.js - 执行角度 8、量角器的 e2e 测试时出错
- amazon-web-services - 具有滑动到期的 S3 预签名 URL
- android - Android NETWORK_PROVIDER locationManager
- xml - 如何使用在单独文件中定义的命名空间将 xml 导入 MarkLogic?
- html - 在 flex 行中对齐内容中心
- mysql - 如何在 Grails 中使用 Hibernate 将 ID 列表传递给存储过程
- python - 如何在一个类中实例化多个类:Python OOP
- react-native - 阻止来自 react-native-webview 的 youtube 网站重定向
- amazon-dynamodb - 如何让 AWS JavaScript SDK 和 DynamoDB 与 LocalStack 一起使用
- javascript - 多个字符串替换功能在nodejs中不起作用