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, время: 11:48. |