16.02.2010, 18:39
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
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?
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
16.02.2010, 18:49
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Сообщение от PeaceCoder
|
запускать на IE6 что бы сработал сам JQ а не querySelectorAll
В peppy, DomAssistant и CarbonJS такого бага нет.
Вы все еще пользуетесь jQ?
|
Да. Просто я не идиот, и использую нормальные селекторы. А "сферическая выборка в вакууме" никому не нужна.
|
|
16.02.2010, 18:58
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от e1f
|
Просто я не идиот, и использую нормальные селекторы.
|
куда уж проще того что я привел в пример? Говоря другими словами. если вы юзаете "#id tag" то селекторы вам вообще не надо...
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
16.02.2010, 18:59
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
$("body > span").find("a")
UPD нет, я стараюсь пользовать поменьше тегов, побольше классов.
|
|
16.02.2010, 19:14
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от e1f
|
$("body > span").find("a")
|
Т.е. изза этого бага теперь только так и никак иначе правильно выбрать нельзя в jQ, если имеются + или >
А изза этого гибкость написания селекторов падает.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
16.02.2010, 19:16
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Баг появляется, когда в дочерних узлах есть такой же тег, как перед 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]
|
|
16.02.2010, 19:20
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Octane, если порытбся в коде сиззл, то видно, что:
мы выбираем крайний правый, потом по одному идем, и находим предка-удовлетворителя (первого попавшегося, это ключевой момент). В результате хватаем не тот спан, который лежит в боди, а ближайший
Вуаля - бочина.
|
|
16.02.2010, 19:34
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
То есть Sizzle сначала найдет<a>, потом поднимется вверх до первого попавшегося <span> и проверит, вложен ли он непосредственно в <body>? Железная логика конечно…
|
|
16.02.2010, 19:41
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Немного не так. Он смотрит: ага, все а я уже нашел, гут. Теперь мне надо проверить, какие из них содержатся в спанах (без учета вложенности). Заодно и подобрать первый такой спан для каждой а, для доказательства. Потом зырк -- ооо, там еще и на приналежность в детям body надо проверить. Упс... А спаны-то не те выбраны.
|
|
17.02.2010, 06:18
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
PeaceCoder, ну если ты так уверен в необходимости сложных селекторов, давай рассматривать конкретные случаи
пока что я вижу, что сложные селекторы могут пригодиться, когда нету возможности изменять код
Сообщение от PeaceCoder
|
куда уж проще того что я привел в пример? Говоря другими словами. если вы юзаете "#id tag" то селекторы вам вообще не надо...
|
где-то так
PeaceCoder, а ты все никак не смиришься?
Последний раз редактировалось x-yuri, 17.02.2010 в 06:25.
|
|
|
|