javascript - querySelector 抛出错误,现在数据格式已更改
问题描述
当用户选择各种按钮时,我正在使用查询选择器来读取输入,然后按钮具有这些选项并且工作正常:
8x10 英寸
12x16 英寸
20x24 英寸
然后我将选项更新为这种格式:
8" x 10"
12" x 10"
20" x 24"
现在我得到这个错误:
Uncaught DOMException: Failed to execute 'querySelector' on 'Document': 'button[data-value="12" x 16""]' is not a valid selector.
这是我的 querySelector 脚本:
<script>
window.addEventListener('load', function(){
var rad = document.querySelectorAll('.swatch input[type="radio"]');
var prev = null;
for (var i = 0; i < rad.length; i++) {
rad[i].addEventListener('change', function() {
(prev) ? console.log(prev.value): null;
if (this !== prev) {
prev = this;
}
console.log(this.value)
document.querySelector('button[data-value="'+this.value+'"]').click()
});
}
// (function() {
// jQuery('.swatch :radio').change(function() {
// var optionIndex = jQuery(this).closest('.swatch').attr('data-index');
// var optionValue = jQuery(this).val();
// });
// });
})
</script>
我正在尝试让脚本读取包含引号的新格式。
我希望这是有道理的。如果你能帮忙,谢谢。
戴尔。
解决方案
'
您可以通过在 every或"
反斜杠前面来转义字符串。
所以你可以做document.querySelector('button[data-value="'+this.value.replace(/"/, '\\"')
+'"]').click()` 来确保每个双引号前面都有一个反斜杠。但是,如果你有单引号或其他不允许的字符,你可能仍然会遇到问题。
另一种选择是滥用JSON.stringify()
:
document.querySelector('button[data-value='+JSON.stringify(this.value)+']').click()
请注意,您不再需要在字符串的一侧添加引号,因为它们由JSON.strinfigy()
.
推荐阅读
- caching - 可扩展且可快速重启的缓存
- reactjs - 为 React 安装 Firebase 时出现 Grpc 错误
- javascript - ClassList 切换在 React 中不起作用。我究竟做错了什么?
- matlab - 展开以消除不连续性
- javascript - 在由 javascript 触发的电子邮件中发送一些 php 变量
- ffmpeg - 无法使用 ffmpeg 创建缩略图
- java - JPA与父亲和孩子的复合id的一对多关系
- shell - cassandra nodetool 从主机刷新
- ruby-on-rails - Rails 关联使用外键并通过
- css - 为什么我的悬停框没有移动响应?