我正在使用jspmBundleSFX
。
在我的某个目录中的index.html
之一,当我在控制台中键入$("#sfsdfasfsdaf").append
时。
我得到function(){return x(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=s(this,a);b.appendChild(a)}})}
Chrome说它属于main.js
,这是捆绑和丑化的js。
$("#sfsdfasfsdaf")
甚至不存在,什么是hapenning?
对于存在的$("#canvas").append
,也会发生这种情况。我得到了相同的结果。
但是appendChild
会返回undefined
在另一个目录中的另一个index.html
中,一切正常。我不知道如何解决这个问题。 index.html
都包含main.js
uglified文件。
编辑:我将$("#canvas");
替换为document.getElementById('canvas');
现在工作正常。但是我仍然不知道为什么会出现这个问题。有些脚本会覆盖或与jQuery发生冲突吗?
答案 0 :(得分:3)
$(" #sfsdfasfsdaf")甚至不存在,什么是hapenning
原因是$(selector)
将始终返回jQuery
对象,无论是否存在匹配的元素。该对象将始终包含属性append
,这是一个函数。没有jQuery方法appendChild
这就是你看到未定义的原因。
除此之外,你还不清楚你想做什么或者你有什么更高级别的问题
答案 1 :(得分:1)
您正在创建一个jQuery对象。它可能是一个空的jQuery对象(如果该元素不存在,或者更准确地说,如果没有元素与选择器匹配),但它仍然是一个jQuery对象。
因此,它仍然具有所有jQuery方法,例如.append
。如果你打电话,它就不会做任何事情。
但是,如果元素不存在(例如。null
将为document.getElementById('herpaderp')
),则Vanilla JavaScript会给null
,而null
没有方法一个元素将具有appendChild
。
就个人而言,我认为这是一件好事 - 如果我说我想要一个元素并且它不存在,那么可能存在更大的问题并且应该抛出错误,但jQuery将继续愉快地继续。