Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.04.2014, 13:09
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

Tiny implementation of jquery
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div class="a">A</div>
  <div class="a">B</div>
</body>
</html>

У нас два дива с одинаковым классом.
И JS код.
$('.a').text('X');

Надо написать крошечную имплементацию jQuery на 5-10 строчек, что бы код выше работал. Как?
Ответить с цитированием
  #2 (permalink)  
Старый 16.04.2014, 13:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Самый грубый вариант:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script type="text/javascript">
    (function() {
      function $(selector) {
        return new $.prototype.init(selector);
      }
      $.prototype = {
        constructor: $,
        length: 0,
        init: function(selector) {
          var elem, elems = document.querySelectorAll(selector);
          for(var i = 0; i < elems.length; i++) {
            this[i] = elems[i];
          }
          this.length = elems.length;
          return this;
        },
        text: function(text) {
          for(var i = 0; i < this.length; i++) {
            this[i].innerHTML = text;
          }
          return this;
        }
      }
      $.prototype.init.prototype = $.prototype;
      window.$ = $;
    }());
  </script>
</head>
<body>
  <div class="a">A</div>
  <div class="a">B</div>
  <script>
    $('.a').text('X');
  </script>
</body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 16.04.2014, 13:44
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

var $ = (function(){
	function jQuery() {
		this.elms = null;
		return this;
	}
	jQuery.prototype.query = function(query) {
		this.elms = document.querySelectorAll(query);
		return this;
	}
	jQuery.prototype.text = function(str){
		if(!this.elms) return this;
		Array.prototype.forEach.call(this.elms, function(elm){
			elm.textContent = str;
		});
		console.log(this);
		return this;
	}
	return function(query){
		var $ = new jQuery;
		return $.query(query);
	};
})();

$('.a').text('X');


second
var $ = (function(){
	var elms = null, self = {
		text: function(str){
			if(!elms) return this;
			Array.prototype.forEach.call(elms, function(elm){
				elm.textContent = str;
			});
			return this;
		}
	}; 
	return function(query){
		elms = document.querySelectorAll(query);
		return self;
	};
})();


тут chain можно сделать

$('.a').text('t').text('z')

nvm, thx

Последний раз редактировалось Manyahin, 16.04.2014 в 13:50.
Ответить с цитированием
  #4 (permalink)  
Старый 16.04.2014, 13:45
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

еще вариант:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script type="text/javascript">
    (function() {
      function $(selector) {
        return this instanceof $ ? this.find(selector) : new $(selector);
      }
      $.prototype = {
        constructor: $,
        length: 0,
        find: function(selector) {
          var elem, elems = document.querySelectorAll(selector);
          for(var i = 0; i < elems.length; i++) {
            this[i] = elems[i];
          }
          this.length = elems.length;
          return this;
        },
        text: function(text) {
          for(var i = 0; i < this.length; i++) {
            this[i].innerHTML = text;
          }
          return this;
        }
      }
      window.$ = $;
    }());
  </script>
</head>
<body>
  <div class="a">A</div>
  <div class="a">B</div>
  <script>
    $('.a').text('X');
  </script>
</body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2014, 01:10
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

самое внятное по моему из всех
var $ = function(selector) { 
  var els = document.querySelectorAll(selector);
  return {
    text: function(val) {
      Array.prototype.forEach.call(els, function(el) {
        el.textContent = val;
      });
    }
  };
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Динамически загружаемая jQuery и jQuery-функции в одном файле 67bytes Общие вопросы Javascript 6 06.03.2013 09:01
tiny scrolling работает только на первой закладке jquery tabs beznika jQuery 4 14.01.2013 09:01
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08
JQuery + FireFox NOOB jQuery 4 02.11.2009 18:16