Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   EASY - JavaScript-выборка по CSS1-3 склекторам (https://javascript.ru/forum/project/14487-easy-javascript-vyborka-po-css1-3-sklektoram.html)

Latro 18.01.2011 18:55

EASY - JavaScript-выборка по CSS1-3 склекторам
 
Представляю вашему вниманию выборку которая легко осуществляет поиск по CSS1-3 селекторам. Исходя из названия, можно понять что выборка мала, и это действительно так, из всех известных мне выборок, моя выборка меньше минимум в 2 раза! Наверное это её самая первая особенность!:D

Увы, но выборкой я уже не занимался давненько, точнее занимался, и это далеко не последняя версия, уже есть наброски гораздо более быстрой выборки!

Объясню как она работает:
<script type='text/javascript'>
easy(selectors)[number]

  //  Пример:
easy('html:root body > div + span#exemple ~ [class$="xemple"]:checked')[0].style.color='red'
</script>


Список возможностей:
//  стандартный набор селекторов:
*
E[foo]
E[foo=bar]
E[foo~=bar]
E[foo^=bar]
E[foo$=bar]
E[foo*=bar]
E[foo|=bar]
E:root
E:nth-child(n)
E:nth-last-child(n)
E:nth-of-type(n)
E:nth-last-of-type(n)
E:first-child
E:last-child
E:first-of-type
E:last-of-type
E:only-child
E:only-of-type
E:empty
E:link
E:target
E:lang(fr)
E:enabled
E:disabled
E:checked
E:not(selectors)
E.class
E #id
E F
E > F
E + F
E ~ F
E, F

  //  дополнительный набор селекторов(нужный по мнению автора):
E[foo!=bar]
E:button
E:contains(text)
E:has(selectors)
E:input
E:parent
E:selected
E:unchecked
E < F


При использовании выборки, её название можно писать как easy, так и $E!

Также в выборку можно добавить свои псевдо-классы, это делается очень просто:
<script type='text/javascript'>
easy['my-pseudo-class']=function(){ [ваш код] }

// пример:
$E.myid=function(o,n){return o.id==n} // если вы собираетесь чтобы у псевдо-класса не было переменной информации(информации в скобках, да и самих скобок), то второй атрибут укажет на название псевдо-класса

$E.ids=function(o,v){return o.id==v} // данный вариант означает, что в скобках псевдо-класса будет указываться нужный айди

$E.id=function(o,v,n){return o[n]==v} // тоже что и предыдущий вариант, только третий атрибут указывает на название псевдо-класса!
</script>


Выборка не использует querySelectorAll, это сделано чтобы пользователь мог видеть реальную скорость выборки, да и вообще, это ещё не последняя версия, думаю поставить эту функцию в других, более быстрых версиях!

Скачать тут(размер - 4,56Кб).

Matre 18.01.2011 19:14

Очень, очень медленно Ваша выборка работает, это делает её использование бессмысленным. Но для первого раза весьма неплохо.
Не хватает селекторов для поиска по регулярным выражениям (а-ля div[class=`\w{1,3}`i]). И ещё всяких вкусностей, например, поиска по уровню вложенности чилда (div a:3-10 — найдёт a с вложенностью в div на 3-10 уровне). Просто наскучили Sizzle-подобные движки. ;)

советую взгленуть реализацию моего движка http://javascript.ru/forum/project/1...elektorov.html Вашь конечно с ним несравнится,но будет вам в пример
благодарностей ненадо

кстати \b я не нашол в исходнике-значет по класам неправильно ищит
ну например в <div class="primer iese"> $E('.primer') ненайдет
а вызов a + * вобще кидает ошибку,lol
как и a:contains(")")

Latro 18.01.2011 21:28

Matre, это ваша реализация выборки не сравнится с моей, ибо моя реализация работает во всех браузерах, а ваша только портит позиционирование z-index'а!

P.S.:
Цитата:

Сообщение от Matre
Очень, очень медленно Ваша выборка работает

Цитата:

Сообщение от Latro
Увы, но выборкой я уже не занимался давненько, точнее занимался, и это далеко не последняя версия, уже есть наброски гораздо более быстрой выборки!

Добавлю: дата билда - 3 сентября 2010 года.
Уже осуществил новые реализации поиска, которые гораздо быстрее нынешней версии!
В ближайшее время собираюсь выложить!

Gvozd 18.01.2011 23:01

Latro,
не обращайте на него внимания
он местный псих и тролль

Matre 18.01.2011 23:07

Gvozd
что я нетак написал??

Latro 19.01.2011 08:55

Gvozd,
а что вы скажите по поводу моей выборки?

Kolyaj 19.01.2011 10:02

Цитата:

Сообщение от Matre
кстати \b я не нашол в исходнике-значет по класам неправильно ищит

Если вы используете \b в поиске по классам, значит ваш скрипт неправильно работает. Тестировать на классах class="foo bar-baz".

Matre 19.01.2011 10:10

Latro
вашь движок весь в дырах
какой селектор не возьми
то type-error, то ищет не правильно
по чему вы игнорируете мое сообщение

Kolyaj
в движке который я выкладывал такой проблемы нет
но почему то вы неоцениели его по довстоинству

Kolyaj 19.01.2011 10:14

Цитата:

Сообщение от Matre
в движке который я выкладывал такой проблемы нет
но почему то вы неоцениели его по довстоинству

Там другая проблема -- он некроссбраузерный. Некроссбраузерные скрипты мне неинтересны. В частности в тех браузерах, в которых ваш движок работает, есть querySelectorAll, и там ваш движок не нужен.

Matre 19.01.2011 10:16

когда будет включена подержка css3-движок станет бомбой
не все же сразу

Цитата:

Некроссбраузерные скрипты мне неинтересны.
ваше субьективное мнение неимеет никакого зночения
я то же могу сказать,что 7-3=5 ,только это ни чего непоменяет

Kolyaj 19.01.2011 10:33

Цитата:

Сообщение от Matre
когда будет включена подержка css3-движок станет бомбой

Когда она будет включена, все браузеры будут иметь нативные движки.

Цитата:

Сообщение от Matre
ваше субьективное мнение неимеет никакого зночения

Я отвечал на вопрос.
Цитата:

Сообщение от Matre
но почему то вы неоцениели его по довстоинству

То, что вам не интересен ответ на ваш же вопрос, меня не сильно расстраивает.

Matre 19.01.2011 10:39

Цитата:

Когда она будет включена, все браузеры будут иметь нативные движки.
пруф?

Цитата:

Я отвечал на вопрос.
вам показалось

Цитата:

То, что вам не интересен ответ на ваш же вопрос, меня не сильно расстраивает.
я этого не говорил

Kolyaj 19.01.2011 10:43

Цитата:

Сообщение от Matre
пруф?

http://prooflink.ru/

Matre 19.01.2011 10:57

а серьезно?

monolithed 19.01.2011 13:12

Цитата:

Сообщение от Matre
а серьезно?

Matre, приведите пример выборки хотя бы по простым селекторам. т.е. как вы представляете работу/использование своего движка на реальных проектах.

Matre 19.01.2011 15:57

.primer
#primer
div:not(.primer, #primer)

monolithed 19.01.2011 17:20

Matre, вы меня не поняли. Вот смотрите, беру я допустим пример Latro, качаю его код, подключаю и использую его API. А что мне делать с вашими 10 строчками, где изменяется z-index, где сама библиотека?

Matre 19.01.2011 18:21

у Latro библиотеки то же нет только движок

B~Vladi 20.01.2011 15:52

:haha:
Вам не кажется, что JS-фрейморки (точнее их авторы) зашли в тупик?
Кругом одни селекторы:help:

Один придумал, все подхватили и пытаются повторить. А кто будет двигать прогресс?

Matre 20.01.2011 16:24

B~Vladi
фреймворк это jqueryUI или ext-js т е они реализуют всякие окна,драггабле и пр.
а jquery это библиотека а не фреймворк
учите слова

B~Vladi 20.01.2011 16:42

Цитата:

Сообщение от Matre
а jquery это библиотека а не фреймворк

Где я говорил, что jQuery - фреймворк? Где я вообще говорил про jQuery? Не удивительно, что ты пишешь "движок поиска по селекторам".

Твой скрипт накроет любой более-менее сложный динамический интерфейс, как накрывает его jQuery при написании кода "на лету" - работет и хорошо, а то, что табы переключаются с задержкой в пол секунды никто не замечает.

Сотри исходники и займись нормальными делами.

Latro 20.01.2011 22:08

B~Vladi,
Ну почему же сразу в тупик, это просто стремление расширить возможности привычных вещей...

Да и вообще, я писал данный скрипт для себя и для того чтобы развивать знания js, выставил сюда чтобы люди посмотрели и оценили его, а не разводили балаган, причём обсуждать в теме совершенно другую разработку(грубо говоря...), когда есть тема для неё...

Я вообще планирую совместить свои разработки в одну небольшую библиотечку, пока что планирую анимацию, аджакс и ядро селекторов...

B~Vladi 20.01.2011 23:15

Цитата:

Сообщение от Latro
причём обсуждать в теме совершенно другую разработку

Я не хотел обсуждать его скрипт, изначально говорил про идею в общем.

Цитата:

Сообщение от Latro
я писал данный скрипт для себя и для того чтобы развивать знания js

Это намного ближе к истине, чем:
Цитата:

Сообщение от Matre
когда будет включена подержка css3-движок станет бомбой

Я тоже считаю, что каждый должен сделать свой велосипед :)

Latro 21.01.2011 07:21

кстати о велосипедах, даже тех самых велосипедов в магазине пруд пруди, так что делать что-то, что уже есть это нормально, главное стараться сделать это лучше!

monolithed 22.01.2011 21:07

Цитата:

Сообщение от B~Vladi
Вам не кажется, что JS-фрейморки (точнее их авторы) зашли в тупик?
Кругом одни селекторы

Один придумал, все подхватили и пытаются повторить. А кто будет двигать прогресс?

помню, вы обещали показать альтернативный подход... :)

Kolyaj 22.01.2011 21:26

Цитата:

Сообщение от monolithed
помню, вы обещали показать альтернативный подход...

Альтернативный подход селекторам? Не использовать селекторы. При нормальной вёрстке достаточно id, className и, иногда, tagName.

monolithed 22.01.2011 21:54

Цитата:

Сообщение от Kolyaj
Альтернативный подход селекторам?

не совсем, там было про альтернативный подход построения библитеки (причем, на сколько я понял без использования цепочек вызовов):
Цитата:

Сообщение от B~Vladi
Я уже давно разрабатываю свой фреймворк. Там от ядра видно только 5-6 методов, из которых только 2 будут часто использоваться программистом, а не 50, как в каждом фреймворке.


B~Vladi 22.01.2011 23:58

Цитата:

Сообщение от monolithed
помню, вы обещали показать альтернативный подход...

Да да, будет вам альтернатива =)
Без этих селекторов, ибо они там вообще не нужны.

Подумайте, сколько процентов нод вы используете из всего документа? 10? Может 5? А теперь взгляните на свои селекторы. Сколько указано имен тегов или классов нод, которые вы не используете? Проще (для новичка, по крайней мере) повесить на всё id, но это не гибко, неудобно и тормозит рендеринг (по собственным наблюдениям). Есть другой, более универсальный способ, а так же способ подачи всего этого в JS-код =)

Вот я и спрашиваю, почему никто не делает "другое", одни селекторы.

Цитата:

Сообщение от monolithed
на сколько я понял без использования цепочек вызовов

Именно. Что затратнее - 10 вызовов функции или 10 изменений значения свойства? :)
Поэтому мне не нравится такая архитектура.


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