Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery баг №2. (https://javascript.ru/forum/jquery/7726-jquery-bag-2-a.html)

PeaceCoder 16.02.2010 18:39

jQuery баг №2.
 
В предыдущей теме я обратил внимание на баг с командой "+" селекторов. Оптимизируя свои селекторы, задался вопросом а не будет ли бага с командой ">", помня логику jQ подумал будет и решил проверить:

<span>
  <i></i>
  <span>
    <i>
      <span>
        <div>
          <b>
            <a></a> <!-- Должен выбрать этот -->
          </b>
          <a></a> <!-- и этот -->
        </div>
      </span>
    </i>
    <span>
      <div>
        <b>
          <a></a> <!-- и этот -->
        </b>
        <a id='#test'></a> <!-- и этот -->
      </div>
    </span>
  </span>
</span>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.min.js">
<script type="text/javascript">
A = $('BODY > SPAN A');
alert('элементов:'+A.length);
</script>

Запустив этот пример увидел результат: 0 элементов в выборке.
запускать на IE6 что бы сработал сам JQ а не querySelectorAll
В peppy, DomAssistant и CarbonJS такого бага нет.
Вы все еще пользуетесь jQ? ;)

e1f 16.02.2010 18:49

Цитата:

Сообщение от PeaceCoder (Сообщение 45046)
запускать на IE6 что бы сработал сам JQ а не querySelectorAll
В peppy, DomAssistant и CarbonJS такого бага нет.
Вы все еще пользуетесь jQ? ;)

Да. Просто я не идиот, и использую нормальные селекторы. А "сферическая выборка в вакууме" никому не нужна.

PeaceCoder 16.02.2010 18:58

Цитата:

Сообщение от e1f
Просто я не идиот, и использую нормальные селекторы.

куда уж проще того что я привел в пример? Говоря другими словами. если вы юзаете "#id tag" то селекторы вам вообще не надо...

e1f 16.02.2010 18:59

$("body > span").find("a")


UPD нет, я стараюсь пользовать поменьше тегов, побольше классов.

PeaceCoder 16.02.2010 19:14

Цитата:

Сообщение от e1f
$("body > span").find("a")

Т.е. изза этого бага теперь только так и никак иначе правильно выбрать нельзя в jQ, если имеются + или >
А изза этого гибкость написания селекторов падает.

Octane 16.02.2010 19:16

Баг появляется, когда в дочерних узлах есть такой же тег, как перед child-selector?
<body>
    <span>
        <strong>
            <span><!-- если бы не было этого span, то элемент был бы найден -->
                <em>
                    <a href="#">a</a>
                </em>
            </span>
        </strong>
    </span>
    <script type="text/javascript">
         alert($("body > span a").size());
    </script>
</body>


[zanude]span не должен находится непосредственно внутри body, как и blockquote, body должен содержать только блочные контейнеры.[/zanude]

e1f 16.02.2010 19:20

Octane, если порытбся в коде сиззл, то видно, что:
мы выбираем крайний правый, потом по одному идем, и находим предка-удовлетворителя (первого попавшегося, это ключевой момент). В результате хватаем не тот спан, который лежит в боди, а ближайший
Вуаля - бочина.

Octane 16.02.2010 19:34

То есть Sizzle сначала найдет<a>, потом поднимется вверх до первого попавшегося <span> и проверит, вложен ли он непосредственно в <body>? Железная логика конечно…

e1f 16.02.2010 19:41

Немного не так. Он смотрит: ага, все а я уже нашел, гут. Теперь мне надо проверить, какие из них содержатся в спанах (без учета вложенности). Заодно и подобрать первый такой спан для каждой а, для доказательства. Потом зырк -- ооо, там еще и на приналежность в детям body надо проверить. Упс... А спаны-то не те выбраны.

x-yuri 17.02.2010 06:18

PeaceCoder, ну если ты так уверен в необходимости сложных селекторов, давай рассматривать конкретные случаи

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

Цитата:

Сообщение от PeaceCoder
куда уж проще того что я привел в пример? Говоря другими словами. если вы юзаете "#id tag" то селекторы вам вообще не надо...

где-то так ;)

PeaceCoder, а ты все никак не смиришься?

Kolyaj 17.02.2010 08:56

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

Если же скрипт зависит только от CSS-классов (без каскадов), то как бы страница не перелопачивалась, скрипты будут работать. Точно также на новой странице достаточно отметить классами нужные элементы, и скрипт на ней будет работать.

PeaceCoder 17.02.2010 11:09

Цитата:

Сообщение от x-yuri
где-то так

Возвращаемся к моему вопросу. А зачем тогда селекторы вообще нужны?

Вы как пользователи разработок говорите что угодно, а я как разработчик привык доводить все до конца и по уму.

П.С. Как в том анекдоте - а случай бывает разный.

subzey 17.02.2010 12:27

Цитата:

Сообщение от Kolyaj
Если же скрипт зависит только от CSS-классов (без каскадов), то как бы страница не перелопачивалась, скрипты будут работать. Точно также на новой странице достаточно отметить классами нужные элементы, и скрипт на ней будет работать.

Полностью согласен. Добавлю лишь, что изменять стóит не оформление элемента, а его сематическую роль. А упор делать на связи между элементами, а не на траверс ДОМа.

Иными словами, если семантичекая роль важного в интерфейсе элемента заключается в том, что это «спан внутри анкера», или «анкер внутри дива внутри бади», то что-то тут не так. Это, конечно, не отменяет кривостей jQ, но ставит (лично для меня) под вопрос их критичность в практике.

Kolyaj 17.02.2010 12:37

Из всего вышесказанного следует ответ на вопрос
Цитата:

Сообщение от PeaceCoder
Вы все еще пользуетесь jQ?

Никогда и не пользовались :)

Octane 17.02.2010 17:24

Цитата:

Сообщение от x-yuri
давай рассматривать конкретные случаи

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

Когда верстальщик пытается сделать анимированную менюшку :)

subzey 17.02.2010 17:52

Octane,
вопрос верстальщика: это настолько сложно?

Octane 17.02.2010 18:23

Ну если он, вертальщик, не знает JavaScript, то конечно сложно.

x-yuri 17.02.2010 19:08

Цитата:

Сообщение от PeaceCoder
Возвращаемся к моему вопросу. А зачем тогда селекторы вообще нужны?

чтобы css-стили назначать ;)

Цитата:

Сообщение от PeaceCoder
Вы как пользователи разработок говорите что угодно, а я как разработчик привык доводить все до конца и по уму.

"Я довожу до конца любую идею, какой бы ненужной она не была...". Так что ли тебя понимать? Ну может она и нужная, только непонятно для чего. Может для парсинга чужих документов или для людей, занимающихся не своим делом... Вот такие пока что у тебя потенциальные пользователи...
p.s. концы бывают разные

PeaceCoder 17.02.2010 21:42

Цитата:

Сообщение от x-yuri
Ну может она и нужная, только непонятно для чего.

Как говорится - опыт штука не минутная. Со временем может и столкнешься ;) Если бы селекторы не были нужны их бы и не придумали...
То что ты будешь писать в 10ки строк у меня будет в 1 строку ;) А вообще, что Вы, x-yuri, забыли в этой теме, если ими не пользуетесь на полную мощь?

x-yuri 18.02.2010 01:30

Цитата:

Сообщение от PeaceCoder
То что ты будешь писать в 10ки строк у меня будет в 1 строку

Цитата:

Сообщение от Дейкстра
Компетентный программист хорошо знает о том, что объем его черепной коробки крайне ограничен; поэтому он подходит к задаче программирования с предельным смирением, и помимо прочего он избегает заумных трюков как чумы. В случае хорошо известных диалоговых языков мне часто толковали со всех сторон, что как только сообщество программистов обзавелось терминалами, появился специфический феномен, который даже получил широко известное название - "однострочники". Он принимает одну из двух форм: один программист кладет перед другим однострочную программу и либо гордо рассказывает, что она делает, а затем спрашивает: "А ты можешь закодировать это меньшим количеством символов?" - как будто это имеет какую-то практическую ценность, - либо просто спрашивает: "Угадай, как это работает!". Из этого наблюдения мы можем заключить, что в качестве инструмента этот язык является открытым вызовом для хитроумных трюков; и пока именно это может быть объяснением его привлекательности для некоторых, которым нравится демонстрировать свою гениальность, простите меня, но я вынужден рассматривать его как самую предосудительную вещь, насколько это вообще может относиться к языку программирования.

Цитата:

Сообщение от PeaceCoder
А вообще, что Вы, x-yuri, забыли в этой теме, если ими не пользуетесь на полную мощь?

ну ты же тему назвал не так: "И снова о селекторах..."

Цитата:

Сообщение от PeaceCoder
Как говорится - опыт штука не минутная. Со временем может и столкнешься Если бы селекторы не были нужны их бы и не придумали...

если кто-то гвозди микроскопом забивает, это не значит, что в этом есть какой-то смысл. Может он молоток пропил :) Или ему просто по приколу

p.s. а вообще надо как-то этот вопрос закрывать (не топик), а то толку никакого ни тебе, ни мне

micscr 18.02.2010 06:57

peaceCoder вообще меткий такой метатель снежков по движущемуся поезду jQuery:) . По кабине выцеливает;) .
Только я одного не пойму - с jQuery работают десятки тысяч людей и мощное англоязычное комьюнити. Почему они не "нарыли" этот баг и не сообщили разработчикам чтобы те исправили? Может так просто никто не делает? Лично я с предыдущим твоим примером бага разбирался, так скажу что выборка изначально очень странная.
Мне вот что интересно - те кто не используют фреймворки - станут ли они на pure JS ради выбора нескольких элементов делать такие обходы дерева html?

Снежок в peaceCodera:) :
Один известный заграничный гуру сформулировал правила - Как выглядит красивый HTML-код:
...
8. JavaScript - jQuery (самый красивый JavaScript-фреймворк) подключается с сайта Google. Подключается только один файл с JavaScript. Оба файла прописываются внизу кода страницы.
....

PeaceCoder 18.02.2010 12:16

Цитата:

Сообщение от x-yuri
объем его черепной коробки крайне ограничен;

Да, но одно тот кто это сказал забывает. вся память о своей жизни умещается на пару кубических сантиметров этого мозга и мозг работает только на макс. 10% от своих способностей.

Нет предела совершенству.
Цитата:

Сообщение от x-yuri
толку никакого ни тебе, ни мне

Почему нет толку. Мы же не спорим, а культурное обрисовываем ситуацию.
Цитата:

Сообщение от micscr
с jQuery работают десятки тысяч людей

Именно работают с ним, а не работают в нем, не покопавшись и не разобравшись как он сам работает и выгодно ли его использовать. Разницу чувствуешь? Скажу сразу, раскопав почти весь jQ, он не идеален и почти 60% кода можно ускорить и сделать меньше.
Для меня громкое имя jQuery, которое он завоевал не пугает и не значит что если им многие пользуются значит он идеален. Windows тоже многие пользуются, а как мы все знаем багов и дыр в ней хоть лопатами отбавляй. И почему-то Торвальдсу нобеля в этом году дают а не деБилу Билу Гейтсу. Вот так то.
Цитата:

Сообщение от micscr
Лично я с предыдущим твоим примером бага разбирался, так скажу что выборка изначально очень странная.

не странная. Выше в посте описали как проявляется этот баг. Пример был приведен, что бы не его рассматривать, а понять что логика селекторов на столько упрощена что она работает неправильно.

П.С. Я не против jQ, я просто сообщил баги, которые обнаружил, и, которые могут привести к дальнейшим багам в работе, которые, не зная их, можно вообще не найти, т.к. баг не в программе, а в библиотеке. И нечего это принимать так близко к сердцу. Такое ощущение, что указав баги, я оскорбил все сообщество jQ пользователей... Все мы не идеальны.

sysya 18.02.2010 12:46

PeaceCoder, согласен что надо рассказывать про баги, это очень важная работа, твои слова да разработчику в уши:)
а можешь исправить баг?

e1f 18.02.2010 14:43

PeaceCoder, а баг-то не jQuery-то :) Баг Sizzle. Берем, качаем репозиторий jquery, смотрим, как он собирается, правим Makefile, правим один файл так, чтобы методы .find и иже с ними работали не через Sizzle, а через Ваш "селектороискатель". Вуаля -- peaceQuery.

e1f 18.02.2010 15:07

Цитата:

Сообщение от PeaceCoder (Сообщение 45273)
П.С. Я не против jQ, я просто сообщил баги, которые обнаружил, и, которые могут привести к дальнейшим багам в работе, которые, не зная их, можно вообще не найти, т.к. баг не в программе, а в библиотеке. И нечего это принимать так близко к сердцу. Такое ощущение, что указав баги, я оскорбил все сообщество jQ пользователей... Все мы не идеальны.

PeaceCoder, возможно, я просто мнительный психопат, но у меня сложилось ощущение, что Вы хотели сказать:
Цитата:

Ололо, смотрите, какой jQ кривой, у него неправильный движок селекторов. Зато мой движок делает правильно

Cr@ZyBoY 18.02.2010 17:40

micscr,
и какой толк от коммьюнити на 10к человек, если они не могут заметить и отписать такую поверхностную ошибку :D Имхо, это наверняка те люди, кто считают jQ отдельным языком программирования, а их труды частенько проскакивают на говнокод.ру %)

e1f 18.02.2010 18:33

Cr@ZyBoY, а Вы так уверены, что она не описана? Багтрекер Sizzle читали?

PeaceCoder 18.02.2010 20:06

Цитата:

Сообщение от e1f
сложилось ощущение, что Вы хотели сказать:

Жаль Вы сарказма не поняли =) яже подмигивал в тексте, значит слова не серьезны.

Cr@ZyBoY 18.02.2010 20:07

http://github.com/jeresig/sizzle/issues
Конкретно этого бага я там не нашёл.


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