我正在尝试在设置data-attribute
的链接上使用聚焦方法(触摸,鼠标或键盘)。
$(function() {
var i,
r = document.getElementsByTagName("a")[0];
if ("ontouchstart" in window) {
document.addEventListener("touchstart", function(event) {
i = "touch";
}, true);
}
else {
document.addEventListener("mousedown", function(event) {
i = "mouse";
}, true);
}
document.addEventListener("keydown", function(event) {
i = "keyboard";
}, true);
})
问题是我只在jQuery的最后一部分中得到结果:
$("a").focus(function() {
$(this).attr("data-focus-method", i)
})
$("a").blur(function() {
$(this).removeAttr("data-focus-method")
})
我想用纯JavaScript编写整个代码。我已经尝试过以下方法:
r.addEventListener("focus", function() {
r.setAttribute("data-focus-method", i);
});
r.addEventListener("blur", function() {
r.removeAttribute("data-focus-method");
});
但是它不起作用。 有人可以帮我吗?
答案 0 :(得分:1)
我建议使用querySelectorAll方法并使用forEach迭代节点列表
window.localStorage.setItem('test','test');
localStorage.test2='test2';
localStorage.setItem('test3','test3');
答案 1 :(得分:0)
我不确定为什么每次按下键盘上的键时都试图覆盖i
方法。但是,我假设这是理想的效果,因为您没有在问题中提及它。
也就是说,这是使您更接近原始JS版本代码的目标的方法。
答案使用spread operator将您从getElementsByTagName
获得的nodeList转换为数组,然后使用forEach()遍历数组项。对于每一项,我们为focus
添加两个event listeners.,为blur
添加一个。
重点突出时,我们添加属性。当模糊时,我们删除该属性。我选择了set attribute和remove attribute,但也可以根据需要使用dataset。
为了确定i
(方法)是什么,我使用了let和一个ternary operator。
我仍然不确定为什么要在按下键盘上的某个键时覆盖该方法,所以我还是放弃了。如果您让我知道所需的效果,我可以改善。
let i = ("ontouchstart" in window) ? "touch" : "mouse";
document.addEventListener("keydown", () => {
i = "keyboard"
})
const links = [...document.getElementsByTagName("a")];
links.forEach(link => {
link.addEventListener("focus", () => {
link.setAttribute('data-focus-method', i);
});
link.addEventListener("blur", () => {
link.removeAttribute('data-focus-method');
})
})
<a href="#">My link 1</a>
<a href="#">My link 2</a>
<a href="#">My link 3</a>
答案 2 :(得分:0)
我添加了解决方案:
var w;
for (w = 0; w < r.length; w++) {
r[w].addEventListener("focus", function() {
this.setAttribute("data-focus-method", i);
});
r[w].addEventListener("blur", function() {
this.removeAttribute("data-focus-method");
});
}
顺便说一句,感谢所有帮助我的人!