Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 30.12.2011, 15:40
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от devote
неужели так сложно понять что дело не в скорости.
Ок. Прочесть то что чуть ниже никак?
Ответить с цитированием
  #32 (permalink)  
Старый 30.12.2011, 16:06
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
Нравится из-за того, с ней я могу сделать почти всё, не прибегая к нативным средствам браузера, не трахаясь с кроссбраузерностью.
очень распространенное заблуждение, либо у тебя задачи такие, подходящие

Сообщение от Octane
Мне в jQuery не нравится, что она всегда работает с коллекцией элементов, даже если известно, что элемент один, например:
$("#btn").hide()

в случае отсутствия #btn, никакой ошибки не произойдет, а логичнее было бы получить в консоли сообщение о том, что какое-то внутреннее свойство null.
не согласен, у каждый из двух подходов удобен в соответствующей ситуации, а выдавать ошибки... не вижу в этом необходимости

Сообщение от FiNOM
Тогда будет больше кода, а производительность не сильно изменится (при одном элементе будет одна итерация цикла).
насколько больше?
Ответить с цитированием
  #33 (permalink)  
Старый 30.12.2011, 16:32
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от x-yuri
насколько больше?
На одну проверку больше: один элемент, делаем это, больше — делаем то.
Сообщение от x-yuri
не вижу в этом необходимости
Ну вот человек ошибся в селекторе, срипт выдал экзепшн "синтакс эррор" и фиг поймешь, в какой строке и к чему относится этот экзепшн. Так ему просто в консоли сообщать: с селектором трабл. Или другая ситуация: селектор вернул 0 элементов, человек применяет цепочку методов, но ничего не происходит. Что делать? Мне кажется вполне логичным написать в консоли, что элементов ноль, и что ничего происходить не должно.
Ответить с цитированием
  #34 (permalink)  
Старый 30.12.2011, 17:41
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от 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")
Ответить с цитированием
  #35 (permalink)  
Старый 30.12.2011, 18:00
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
то получим
Цитата:
почему мы не должны ждать такой же ошибки?
потому, что имхо это чуть разные вещи.
в случае с querySelector это лишь возврат функции которая может возвращать объекты разных типов(что в общем-то наверное не совсем правильно).
когда мы работаем с выборкой, то хочется единого АПИ в независимости есть в выборке элементы или нет(в конце концов это просто состояние объекта)
на практике позволяет в клиентском коде избегать ненужных if-в.

ЗЫ про style сенкс. не догадывался что есть такая особенность.

Последний раз редактировалось float, 30.12.2011 в 18:06.
Ответить с цитированием
  #36 (permalink)  
Старый 30.12.2011, 18:19
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

а вообще тс странный. и вступительная речь тоже.
мне например чтобы перевести своё детище на поддержку только "правильных" браузеров понадобиться ну час мб. jquery ну пускай день два.
Лично мне видится её главным недостатком(ну по крайней мере сейчас, когда я не спал сколько там... 22 часа) - сверх универсальность. Под конкретные задачи можно сделать лучше. Иногода это критично.
Посему к тсу - чтобы делать свой ворк/библиотеку нужен какой-то мотиватор, какая-то задача. Без этого быстро надоест.
Ответить с цитированием
  #37 (permalink)  
Старый 30.12.2011, 18:21
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

float, чем не задача сделать либу быстрее, чем jQuery, но с совместимостью кода?
Ответить с цитированием
  #38 (permalink)  
Старый 30.12.2011, 18:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

В общем эта тема превращается в срач, один предлагает поддерживать старые версии ИЕ и критикует сообщения прочитав только половину, другой говорит, что нужно создать отдельные методы для одиночиых элементов, по сути отдельную библиотеку, третий обзывает меня странным, при этом сказав, что за пару часов перепишет jQuery, сделав то же самое что и я. Остальным спасибо за помощь. Если что-то будет готово, сообщу. В срачах учавствовать не буду. На всякий случай, по совету melky запилю на гитхаб после нормальной реализации метода animate.
Ответить с цитированием
  #39 (permalink)  
Старый 30.12.2011, 18:37
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от FINoM
Ок. Прочесть то что чуть ниже никак?
И что мне твое ниже даст?

пример:
<style>
div {
    width: 200px;
    height: 200px;
}
</style>
<div id="owner">
    <div id="child"></div>
</div>
 
<script>

function yourStyle( elem, prop ) {
    return elem.style[prop] ||
                    elem.ownerDocument.defaultView.getComputedStyle( elem, null ).getPropertyValue( prop );
}
 
function style( elem ) {
    if ( elem.ownerDocument && elem.ownerDocument.defaultView ) {
        return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
    } else if ( elem.currentStyle ) {
        return elem.currentStyle;
    }
    return null;
}

var elem = document.getElementById('owner');

// проверяем твоей:
alert( [ yourStyle( elem, 'width' ), yourStyle( elem, 'height' ) ] );
// проверяем моей:
alert([ style( elem ).width , style( elem ).height ]);


// меняем ширину у элементов:
document.getElementById( 'owner' ).style.width = "auto";
document.getElementById( 'child' ).style.width = "300px";


// снова проверяем родителя:

// проверяем твоей:
alert( [ yourStyle( elem, 'width' ), yourStyle( elem, 'height' ) ] );
// проверяем моей:
alert([ style( elem ).width , style( elem ).height ]);


</script>
Ответить с цитированием
  #40 (permalink)  
Старый 30.12.2011, 18:56
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от FINoM
На одну проверку больше: один элемент, делаем это, больше — делаем то.
выводы о значительности каждый делает сам... учитывая то, что "один элемент, делаем это" - это частный случай "больше — делаем то"

Сообщение от FINoM
Ну вот человек ошибся в селекторе, срипт выдал экзепшн "синтакс эррор" и фиг поймешь, в какой строке и к чему относится этот экзепшн. Так ему просто в консоли сообщать: с селектором трабл. Или другая ситуация: селектор вернул 0 элементов, человек применяет цепочку методов, но ничего не происходит. Что делать? Мне кажется вполне логичным написать в консоли, что элементов ноль, и что ничего происходить не должно.
опять абстрактные примеры? Обычно ты делаешь и проверяешь по ходу. И даже потом не сложно найти ошибку. Если сложно, тогда да, надо ее выдавать.

Сообщение от Octane
почему мы не должны ждать такой же ошибки?
вопрос не в последовательности а в том, будет ли это заметной помощью

Сообщение от Octane
Чтобы избежать этой проблемы, предлагаю не страдать фигней в погоне за совместимостью с jQuery, а сделать, как мне кажется, более удобно:
недостаток этого метода в том, что надо проверять существует ли объект: [jQuery] $('#id').addClass(...), [твой вариант] $('#id') && $('#id').addClass(...) ну или $$('#id').addClass(...), но тогда мы используем $$, несмотря на то, что нас интересует один элемент. Недостаток jQuery в том, что если надо получить доступ к этому одному элементу, надо писать $('#id')[0], вместо $('#id'). Может что-то забыл.

Сообщение от float
Посему к тсу - чтобы делать свой ворк/библиотеку нужен какой-то мотиватор, какая-то задача. Без этого быстро надоест.
хуже, я бы сказал, что библиотеки должны получаться в результате решения задач, а не наоборот

Сообщение от FINoM
В общем эта тема превращается в срач, один предлагает поддерживать старые версии ИЕ и критикует сообщения прочитав только половину, другой говорит, что нужно создать отдельные методы для одиночиых элементов, по сути отдельную библиотеку, третий обзывает меня странным, при этом сказав, что за пару часов перепишет jQuery, сделав то же самое что и я.
"Вы мне, пожалуйста, все тут давайте советы, но если они мне не понравяться, я вас слушать не буду, так что не обижайтесь..."

Последний раз редактировалось x-yuri, 30.12.2011 в 18:58.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как подключить две версии библиотеки jquey одновременно abuGabi jQuery 6 05.11.2011 07:45
Полный URL элемента библиотеки sharepoint yardie Общие вопросы Javascript 2 07.09.2011 14:45
Необходимы советы как убирать не нужное из библиотеки jquery. dr_gluk jQuery 13 18.07.2011 12:05
Ищу библиотеки для работы с 3D Бобр Общие вопросы Javascript 3 06.08.2010 17:02
Тестирование функции библиотеки AnimaJS Библиотеки/Тулкиты/Фреймворки 2 26.06.2008 22:45