Сообщение от x-yuri
|
не согласен, у каждый из двух подходов удобен в соответствующей ситуации, а выдавать ошибки... не вижу в этом необходимости
|
Ну как же, когда мы пишем на чистом JS:
document.querySelector("#btn").className += "active";
то получим
Цитата:
|
TypeError: document.querySelector("#btn") is null
|
фреймворк просто сокращает запись:
$("#btn").addClass("active");
почему мы не должны ждать такой же ошибки?
а вот, когда работаем с коллекцией, то отсутствие ошибок вполне логично:
var list = document.querySelectorAll(".btn"), i = list.length;
while (i--) {
…
}
или
$(".btn").addClass("active")
тут программист берет в расчет, что элементов в коллекции может и не быть, и никакие действия не выполнятся, что на чистом JS, что с помощью jQuery.
Чтобы избежать этой проблемы, предлагаю не страдать фигней в погоне за совместимостью с jQuery, а сделать, как мне кажется, более удобно:
function $(selector) {
return new $Node(document.querySelector(selector));
}
function $$(selector) {
return new $NodeList(document.querySelectorAll(selector));
}
function $Node(node) {
this.node = node;
}
$Node.prototype = {
addClass: …,
…
remove: …,
…
parent: …,
…
};
function $NodeList(list) {
this.list = list;
}
$NodeList.prototype = {
first: …,
…
last: …,
…
each: …,
…
};
никакого дублирования методов не нужно:
$$("selector").each("method", arguments)
и в коде будет наглядно:
$(selector).remove();
$$(selector).each("remove")