是追加和appendChild被覆盖?

时间:2016-03-19 12:48:01

标签: javascript jquery jspm

我正在使用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发生冲突吗?

2 个答案:

答案 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将继续愉快地继续。