我有这段代码:
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”指的是被点击的元素。
答案 0 :(得分:4)
尝试
if (this.lastChild.tagName == "IMG") {
// ...
“tagName”属性是大写的。或者,你无法做出这个假设并强迫这件事:
if (this.lastChild.tagName.toLowerCase() == "img") {
// ...
也应该有效。但是,如果您的上一个子节点不是具有标记名称的节点,则第二个版本将遇到问题 - 例如,如果它是文本或注释节点。你会得到一个例外但不是第一个例外。您可以进行明确的undefined
测试,但大写约定实际上是在HTML DOM Level 1规范中,因此这是一个非常安全的假设。 (编辑一个聪明的人指出.nodeName
属性将始终存在,并且它与元素节点的.tagName
相同。它也是大写的。)< / p>