【发布时间】:2016-08-17 04:05:31
【问题描述】:
我开始在 Vanilla JS 中编写 jQuery,并且我的选择器可以工作,但是当我在 HTML 元素上调用 append 函数时,我收到“不是函数”错误。
var $ = function(){
this.select = function(input) {
if (input.split("")[0] == "#") {
input = input.slice(1, input.length)
return document.getElementById(input)
}
else if (input.split("")[0] == ".") {
input = input.slice(1, input.length)
return document.getElementsByClassName(input)
}
else {
return document.getElementsByTagName(input)
}
},
this.append = function(text) {
return this.innerhtml = this.innerhtml + text
}
};
我的控制台尝试:
var myQuery = new $();
返回未定义
myQuery.select("#testspan")
在这里返回我的span 标签
myQuery.select("#testspan").append("hellohello")
返回错误
VM2207:1 Uncaught TypeError: myQuery.select(...).append is not a function(...)
【问题讨论】:
-
如果你想链接你的函数,他们需要返回
this(返回当前实例)或使用new $()创建一个新实例并返回它。当前,您的select()方法返回一个对象,该对象是单个 DOM 元素或 DOM 元素列表,两者都没有.append()方法。 -
您可能还想将整个
select函数替换为querySelectorAll:) 您不需要自己解析选择器。 -
@nnnnnn 我猜这应该是一个(接受的)答案。
-
顺便说一句,
input.split("")[0]是一种获取字符串第一个字符的奇怪方法。请改用input.charAt(0)或input[0]。
标签: javascript html