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, а ты все никак не смиришься? |
Часовой пояс GMT +3, время: 02:26. |