将“tagName”属性与“img”进行比较对<img/>元素不起作用

时间:2014-01-03 21:25:27

标签: javascript if-statement

我有这段代码:

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

        var image = document.createElement('img');
    }
}

注意,在第二部分中,当我检查console.log时,它打印出来:

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

它只是跳过'if'并跳转到'else'。 唔,什么?

编辑:为了填补你,这是一个onclick事件。因此,“this”指的是被点击的元素。

1 个答案:

答案 0 :(得分:4)

尝试

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

“tagName”属性是大写的。或者,你无法做出这个假设并强迫这件事:

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

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