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('!@#$%^&*()_')

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

amt35 30.09.2013 20:01

$('#test') $('.test') - поиск простых селекторов, разве здесь есть ошибки?

devote 30.09.2013 20:11

(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(args) { return new _$(args); }
})();

devote 30.09.2013 20:13

Цитата:

Сообщение от amt35
разве здесь есть ошибки?

ошибка в том, что ты в метод querySelectorAll передаешь объект arguments вместо строки, ты ошибки то хоть переводи, тебе ясно написали:
SyntaxError: An invalid or illegal string was specified

danik.js 30.09.2013 20:28

amt35, я смотрю ты комменты через один читаешь.
Я ведь уже демонстрировал твой косяк:
http://javascript.ru/forum/events/41...tml#post274445

danik.js 30.09.2013 20:30

document.querySelectorAll('[object Arguments]')

amt35 30.09.2013 20:34

Спасибо devote! Действительно тупейшая ошибка. querySelectorAll принимает как аргумент строку, даже если это запрос типа ''#test1, #test2, #test3''.
Извини danik.js , я не понял твой комментарий.


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