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? ;) |
Цитата:
|
Цитата:
|
$("body > span").find("a") UPD нет, я стараюсь пользовать поменьше тегов, побольше классов. |
Цитата:
А изза этого гибкость написания селекторов падает. |
Баг появляется, когда в дочерних узлах есть такой же тег, как перед 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] |
Octane, если порытбся в коде сиззл, то видно, что:
мы выбираем крайний правый, потом по одному идем, и находим предка-удовлетворителя (первого попавшегося, это ключевой момент). В результате хватаем не тот спан, который лежит в боди, а ближайший Вуаля - бочина. |
То есть Sizzle сначала найдет<a>, потом поднимется вверх до первого попавшегося <span> и проверит, вложен ли он непосредственно в <body>? Железная логика конечно…
|
Немного не так. Он смотрит: ага, все а я уже нашел, гут. Теперь мне надо проверить, какие из них содержатся в спанах (без учета вложенности). Заодно и подобрать первый такой спан для каждой а, для доказательства. Потом зырк -- ооо, там еще и на приналежность в детям body надо проверить. Упс... А спаны-то не те выбраны.
|
PeaceCoder, ну если ты так уверен в необходимости сложных селекторов, давай рассматривать конкретные случаи
пока что я вижу, что сложные селекторы могут пригодиться, когда нету возможности изменять код Цитата:
PeaceCoder, а ты все никак не смиришься? |
Селекторы -- зло. И чем они сложнее, тем они злее. Это смешение вёрстки и js-кода. Фактически они становятся повязанными навечно. Нельзя просто взять и добавить пару тегов в вёрстку, т.к. все скрипты сломаются, и нужно править их тоже. Нельзя взять скрипт и подключить его на другую страницу, т.к. он работает только на данной конкретной странице.
Если же скрипт зависит только от CSS-классов (без каскадов), то как бы страница не перелопачивалась, скрипты будут работать. Точно также на новой странице достаточно отметить классами нужные элементы, и скрипт на ней будет работать. |
Цитата:
Вы как пользователи разработок говорите что угодно, а я как разработчик привык доводить все до конца и по уму. П.С. Как в том анекдоте - а случай бывает разный. |
Цитата:
Иными словами, если семантичекая роль важного в интерфейсе элемента заключается в том, что это «спан внутри анкера», или «анкер внутри дива внутри бади», то что-то тут не так. Это, конечно, не отменяет кривостей jQ, но ставит (лично для меня) под вопрос их критичность в практике. |
Из всего вышесказанного следует ответ на вопрос
Цитата:
|
Цитата:
|
Octane,
вопрос верстальщика: это настолько сложно? |
Ну если он, вертальщик, не знает JavaScript, то конечно сложно.
|
Цитата:
Цитата:
p.s. концы бывают разные |
Цитата:
То что ты будешь писать в 10ки строк у меня будет в 1 строку ;) А вообще, что Вы, x-yuri, забыли в этой теме, если ими не пользуетесь на полную мощь? |
Цитата:
Цитата:
Цитата:
Цитата:
p.s. а вообще надо как-то этот вопрос закрывать (не топик), а то толку никакого ни тебе, ни мне |
peaceCoder вообще меткий такой метатель снежков по движущемуся поезду jQuery:) . По кабине выцеливает;) .
Только я одного не пойму - с jQuery работают десятки тысяч людей и мощное англоязычное комьюнити. Почему они не "нарыли" этот баг и не сообщили разработчикам чтобы те исправили? Может так просто никто не делает? Лично я с предыдущим твоим примером бага разбирался, так скажу что выборка изначально очень странная. Мне вот что интересно - те кто не используют фреймворки - станут ли они на pure JS ради выбора нескольких элементов делать такие обходы дерева html? Снежок в peaceCodera:) : Один известный заграничный гуру сформулировал правила - Как выглядит красивый HTML-код: ... 8. JavaScript - jQuery (самый красивый JavaScript-фреймворк) подключается с сайта Google. Подключается только один файл с JavaScript. Оба файла прописываются внизу кода страницы. .... |
Цитата:
Нет предела совершенству. Цитата:
Цитата:
Для меня громкое имя jQuery, которое он завоевал не пугает и не значит что если им многие пользуются значит он идеален. Windows тоже многие пользуются, а как мы все знаем багов и дыр в ней хоть лопатами отбавляй. И почему-то Торвальдсу нобеля в этом году дают а не Цитата:
П.С. Я не против jQ, я просто сообщил баги, которые обнаружил, и, которые могут привести к дальнейшим багам в работе, которые, не зная их, можно вообще не найти, т.к. баг не в программе, а в библиотеке. И нечего это принимать так близко к сердцу. Такое ощущение, что указав баги, я оскорбил все сообщество jQ пользователей... Все мы не идеальны. |
PeaceCoder, согласен что надо рассказывать про баги, это очень важная работа, твои слова да разработчику в уши:)
а можешь исправить баг? |
PeaceCoder, а баг-то не jQuery-то :) Баг Sizzle. Берем, качаем репозиторий jquery, смотрим, как он собирается, правим Makefile, правим один файл так, чтобы методы .find и иже с ними работали не через Sizzle, а через Ваш "селектороискатель". Вуаля -- peaceQuery.
|
Цитата:
Цитата:
|
micscr,
и какой толк от коммьюнити на 10к человек, если они не могут заметить и отписать такую поверхностную ошибку :D Имхо, это наверняка те люди, кто считают jQ отдельным языком программирования, а их труды частенько проскакивают на говнокод.ру %) |
Cr@ZyBoY, а Вы так уверены, что она не описана? Багтрекер Sizzle читали?
|
Цитата:
|
http://github.com/jeresig/sizzle/issues
Конкретно этого бага я там не нашёл. |
Часовой пояс GMT +3, время: 13:03. |