将"tagName"属性与"img"进行比较不适用于<img>元素



>我有这个代码片段:

function switchEvent() {
    if (this.lastChild.tagName == "img" ) {
        var remove = this.lastChild;
        this.removeChild(remove);
    }
    else {
        console.log(this.lastChild);
        var image = document.createElement('img');
    }
}

请注意,在第二部分中,当我检查控制台.log时,它会打印出来:

<img height="20" width="75" src="btn2.png" style="left: -14px; right: 0px;">

它只是跳过"如果"并跳到"其他"。呃,什么?

编辑:为了填写您,这是一个点击事件。因此,"this"是指单击的元素。

尝试

if (this.lastChild.tagName == "IMG") {
// ...

"tagName"属性是大写的。或者,你不能做出这个假设并强迫这件事:

if (this.lastChild.tagName.toLowerCase() == "img") {
// ...

也应该工作。但是,如果您的最后一个子节点不是具有标签名称的节点(例如,如果它是文本或注释节点),则第二个版本将遇到问题。 你会得到一个例外,但不是第一个。 你可以做一个明确的undefined测试,但大写约定实际上是在HTML DOM Level 1规范中,所以这是一个非常安全的假设。(编辑 一位聪明人指出,.nodeName属性将始终存在,并且它与元素节点的.tagName相同。它也是大写的。

最新更新