【发布时间】:2021-03-29 10:18:19
【问题描述】:
我在 JavaScript 的字符串中硬编码了这个 SVG 图标,但我无法为其添加侦听器。
let zoom_in_icon = '<div>';
zoom_in_icon = zoom_in_icon +'<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/>';
zoom_in_icon = zoom_in_icon + '<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zm.5-7H9v2H7v1h2v2h1v-2h2V9h-2z" fill="white"/>';
zoom_in_icon = zoom_in_icon + '</svg>';
zoom_in_icon = zoom_in_icon + '</div>';
当我这样尝试时它失败了:
未捕获的类型错误:zoom_in_icon.addEventListener 不是函数
zoom_in_icon.addEventListener('mouseover', function (evt) {
zoom_in_icon.style.cursor = 'pointer';
});
zoom_in_icon.addEventListener('mouseout', function (evt) {
zoom_in_icon.style.cursor = 'auto';
});
是否可以这样做,或者我必须使用 DOM 使用纯 Javascript 创建这个 SVG?
更新: 现在我正在尝试使用纯 Javascript 创建一个 Div,这样我就可以直接引用 DOM 而不是字符串,这可能是它失败的原因。
var newElement = document.createElement('div');
let zoom_in_icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/>';
zoom_in_icon = zoom_in_icon + '<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zm.5-7H9v2H7v1h2v2h1v-2h2V9h-2z" fill="white"/>';
zoom_in_icon = zoom_in_icon + '</svg>';
newElement.innerHTML = zoom_in_icon;
newElement.addEventListener('mouseover', function (evt) {
newElement.style.cursor = 'pointer';
});
newElement.addEventListener('mouseout', function (evt) {
newElement.style.cursor = 'auto';
});
这还是不行!现在它没有失败,但是,div 中没有添加任何侦听器。当我悬停时,它不会改变光标。
【问题讨论】:
-
您的变量
zoom_in_icon是一个文本字符串,而不是对DOM 元素的引用。见javascript.info/searching-elements-dom -
@Danny'365CSI'Engelman 请检查更新后的问题。
-
你的第二个版本对我来说非常好——假设
newElement实际上在某个时候被附加到文档中。 -
“当我悬停时它不会改变光标。” - 你为什么要这样做首先使用事件监听器?
cursor属性一开始只适用于处于悬停状态的元素,因此您可以通过 CSS 应用它并完成它:div { cursor: pointer; } -
@CBroe 我刚做过,以前不知道!
标签: javascript html svg dom-events