我正在写一个javascript库。这是基本代码:
(function (window) {
var versrionInfo = {
release : 1.0,
date : "10/5/2013",
releaseNotes : "This is the first oficial release of techx. Basic functions have been implemented."
},
regex = {
Id : /^[#]\w+$/,
Class : /^[.]\w+$/,
Tag : /^\w+$/,
validSelector : /^([#]\w+|[.]\w+|\w+)$/
},
tex = function(selector){
//only some of the functions need to select an element
//EX:
// style: tex(selector).style(style);
//one that would not need a selector is the random number function:
// tex().random(from,to);
if (selector){
if (typeof selector === 'string'){
var valid = regex.validSelector.test(selector);
if( valid ){
this.length = 1;
if(regex.Id.test(selector)){
this[0] = document.getElementById(selector);
}
if(regex.Class.test(selector)){
this[0] = document.getElementByClass(selector);
}
if(regex.Tag.test(selector)){
this[0] = document.getElementByTagName(selector);
}
}
}else if(typeof selector === 'object'){
this = selector;
}
//this = document.querySelector(selector);
// I could make a selector engine byt I only need basic css selectors.
}
};
tex.prototype = {
dit : function(){
this.innerHTML = 'Hi?!?!?!';
}
};
window.tex = tex;
})(window);
在正文部分,我有一个输入和一个ID为test
的div。在输入按钮上我有:onclick=tex('#test').dit();
。当我尝试运行代码时,我得到一个错误,表明它是未定义的。有谁知道我的代码出了什么问题?
答案 0 :(得分:1)
document.getElementById只接受没有'#'的元素本身的id。散列符号在jquery和css中用于表示id,但是为了定位元素本身你只需要使用id - 在本例中为'test'。
要让您的脚本运行,您需要删除'。'或分别调用getElementById或getElementByClass之前的'#'。
您可以使用javascript substring方法来实现此目标。
编辑:另请参阅Pointy对函数.tex没有返回语句的注释。