2013-10-11 3 views
0

Я пишу библиотеку javascript. здесь основной код:Javascript library undefined

(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); 

В разделе тела у меня есть вход и DIV с идентификатором test. На кнопке ввода у меня есть следующее: onclick=tex('#test').dit();. Когда я пытаюсь запустить код, я получаю сообщение об ошибке, которое говорит, что оно не определено. Кто-нибудь знает, что не так с моим кодом?

+0

Ну, вызов 'tex()' * does * возвращает 'undefined'. Вы имели в виду ['(новый tex ('#test')) .dit()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new)? – Bergi

+1

@Bergi Библиотека должна работать так же, как jQuery: 'tex (" selector "). Function()' –

+1

@TekiTech Функция "tex" не имеет оператора 'return', поэтому он не может работать таким образом. – Pointy

ответ

1

document.getElementById принимает только идентификатор самого элемента без '#'. Хэш-нотация используется в jquery и css для указания идентификатора, но для того, чтобы нацелить сам элемент, вы просто используете идентификатор - в этом случае «тест».

Чтобы запустить скрипт, вам необходимо удалить '.' или '#', прежде чем вы вызываете getElementById или getElementByClass соответственно.

Для этого вам понадобится метод javascript substring.

Редактировать: Также ссылайтесь на комментарий Pointy относительно функции .tex, не имеющей оператора return.