Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   querySelectorAll(els) (https://javascript.ru/forum/events/41757-queryselectorall-els.html)

amt35 28.09.2013 10:21

querySelectorAll(els)
 
Есть функция
var $ = function(el) {
return document.querySelectorAll(el);
}
прекрасно работает, но не очень удобна в использовании.

Решил переписать ее типа jQuery
(function() {
function $(els) {
this.elements = [];
this.elements = document.querySelectorAll(els);
return this;

}
$.prototype ={
size: function() {
alert('size:'+this.elements.length);
return this;
},
и т.д.

выдает
SyntaxError: An invalid or illegal string was specified
elms = document.querySelectorAll(els);

вместо elms = document.querySelectorAll(els); использовал
var nodesArray = Array.prototype.slice.call(document.querySelectorA ll(els));
все равно выдает
SyntaxError: An invalid or illegal string was specified
var nodesArray = Array.prototype.slice.call(document.querySelectorA ll(els));

в чем SyntaxError, не пойму? подскажите?

danik.js 28.09.2013 14:38

Оформи код.
Добавь демку. Или хотя бы покажи как ты вызываешь функцию.
И где ключевое слово var для elms

ruslan_mart 28.09.2013 16:23

var $ = function(selector) {
   if(this.$) return new $(selector);
   this.elems = document.querySelectorAll(selector);
}

$.prototype = {
   size: function() {
      return this.elems.length;
   }
}

alert( $('body').size() );

amt35 30.09.2013 15:17

Спасибо Ruslan_xDD за работающий код!
Но можно ли туже функцию $ оформить как немедленно вызываемую функцию (function () { код }()); ? Просто под это уже много кода написано...

amt35 30.09.2013 18:32

Вроде все просто, но на строку this.elements = document.querySelectorAll(els); выдает SyntaxError
Пробовал this.elements = Array.prototype.slice.call(document.querySelectorA ll(els)); тоже SyntaxError
Меня большевсего бесит именно SyntaxError, какой SyntaxError в таких простых строках?
Подскажите!

danik.js 30.09.2013 18:52

Полный код тут запости в
[js run] .. [/js]

amt35 30.09.2013 19:12

(function() {
    function _$(els) {
	    this.elements = []; 
		this.elements = Array.prototype.slice.call(document.querySelectorAll(els));
        return this;
    }
	_$.prototype ={
	size: function() {
	  alert('size:'+this.elements.length);
	  return this;
	}
	};
	window.$ = function() { return new _$(arguments); }
})();


Использование $('#test').size();

danik.js 30.09.2013 19:17

Цитата:

Сообщение от amt35
    window.$ = function() { return new _$(arguments); }

Ты че чудишь?
alert( (function() { return arguments.toString() })('body') );

amt35 30.09.2013 19:34

Да вроде эта строка работает, ошибок на эту строку нет.
И вообще если вместо querySelectorAll использовать
this.elements.push(document.getElementById(els));
то все нормально работает.
Почему querySelectorAll вызывает SyntaxError, не пойму.

danik.js 30.09.2013 19:52

Цитата:

Сообщение от amt35
Почему querySelectorAll вызывает SyntaxError, не пойму.

document.querySelectorAll('!@#$%^&*()_')

Ошибка в селекторе, а не в джаваскрипте.


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