Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Последовательность функций как в jquery (https://javascript.ru/forum/events/30898-posledovatelnost-funkcijj-kak-v-jquery.html)

platedz 20.08.2012 02:33

Спасибо попробую. Возникла другая проблема. Если элемент не существует, то метод undefined. И на существующие элементы метод перестает работать. Подскажите, пожалуйста, как это обойти?

cyber 20.08.2012 02:41

код в студию=)

platedz 20.08.2012 02:51

Пока код все тот же.

tel = function(window){

return {
elems : function(e) { dd = document.getElementById(e);  return this;},
 first: function () {

 alert(dd.innerHTML+" - "+this);
 
 return this;
},

 second: function () {

 alert(dd.id+" - "+this);
 return this;
}

}

}(window);

tel.elems("a").first().second();
tel.elems("b").first().second();


Если id="a" на странице не существует, то el.elems("b").first().second(); не выполнится, а надо чтобы работал.

cyber 20.08.2012 02:54

elems : function(e) { 
try {
dd = document.getElementById(e); 
} catch(e) {}
 return this;
},

platedz 20.08.2012 02:58

Спасибо, я тоже так думал. Но все равно не работает.

platedz 20.08.2012 03:12

Кстати, вот так у меня не получилось
function $() {return {}.prototype = tel.elems; }



Зато вышло так,
function $(e) {return {}.prototype = tel.elems(e); }



Но я сделал так,
function $(e) {return  tel.elems(e); }

тк.. с прототипами у меня дела совсем плохо обстоят. Хотя буду рад любому пояснению касательно того, что это такое и зачем они нужны и как с ними работать.

cyber 20.08.2012 03:15

http://learn.javascript.ru/inheritance-intro
Цитата:

function $(e) {return tel.elems(e); }
это работает потому что вы вызваете метод elems и он возвращает this.
лучше уже так
function $(e) {return  tel; }

platedz 20.08.2012 04:14

Спасибо за информацию. Уже начинаю немного понимать, в плане прототипов, особенно в сравнении с php. Хотя еще только на далеко базовом уровне.
Ваш пример не работает, и что не менее Важно теряется elems, т.е. даже если и вернуть корректно tel и заменить его на другое название то все равно придется вызывать elems, например $.elems(id) а нужно $(id)

А самое главное, если id не существует, то код не работает, и это нужно как-то обойти.

cyber 20.08.2012 04:36

Цитата:

А самое главное, если id не существует, то код не работает, и это нужно как-то обойти.
Цитата:

Сообщение от cyber (Сообщение 198919)
elems : function(e) { 
try {
dd = document.getElementById(e); 
} catch(e) {}
 return this;
},

а насчет функции $ я ступил немного , сонный уже..
вот так правильно
function $(e) {return tel.elems(e); }

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <script>

      var object_ = {
        message: function (id){
        alert(id)
         return this;
        }
      
      
      }
      
      function $ (id) {
      
      return object_.message(id);
      }

$('привет');
    </script>

  </body>
</html>

platedz 20.08.2012 04:48

Спасибо за ответ.
try{}cathe(){} не дает результата.
Насколько я понимаю, вызывается метод к элементу которого еще не существует.
В общем если эту проблему решить, то все будет просто замечательно.


Часовой пояс GMT +3, время: 17:06.