Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   QSA CSS Selector Engine v1.0 - Выкладываю CSS-селектор по просьбе трудящихся (https://javascript.ru/forum/project/24330-qsa-css-selector-engine-v1-0-vykladyvayu-css-selektor-po-prosbe-trudyashhikhsya.html)

melky 02.02.2012 15:23

Цитата:

Сообщение от poorking (Сообщение 154790)
Safari can't handle uppercase or unicode characters when in quirks mode.

EN ---> RU

Safari в режиме совместимости не может обрабатывать символы в верхнем регистре или в юникоде.

Наверное, не понял предложения, но при чём тут проверка наличия поддержки querySelector?
На MDN нашёл баг на Safari, это он и есть ?

Если она не поддерживает символы в верхнем регисте в режиме совместимости, почему бы не перевести строку селектора к нижнему регистру? .TEST или .test, в html разницы быть не должно.

ЗЫ Если вам показалось, что я доказываю свою правоту, то это не так. (после марума может так казаться :)) Я хочу разобраться и понять.

Цитата:

Сообщение от monolithed (Сообщение 154791)
В IE7- тоже не прокатывает

не имплементировано, IE8+.

poorking 02.02.2012 15:32

Цитата:

Сообщение от melky
при чём тут проверка наличия поддержки querySelector?

Возможно семантически не верно названа переменная (hasQSA), но этот баг, не смотря на поддержку браузером метода querySelector - есть причина использовать самописный движок нежели нативный, а значение hasQSA в QSA CSS Selector Engine именно для этого и вычисляется

poorking 02.02.2012 15:34

Цитата:

Сообщение от melky
почему бы не перевести строку селектора к нижнему регистру? .TEST или .test, в html разницы быть не должно.

All Selectors syntax is case-insensitive within the ASCII range
http://www.w3.org/TR/selectors/#casesens

Возможно в этом, хотя я задумался и почти уже не знаю даже


ASCII включает национальный алфавит, так что, выходит вы правы с мыслью о том, что можно привести селектор к нижнему регистру, надо потестить

devote 02.02.2012 18:15

Цитата:

Сообщение от monolithed
if (!div.querySelectorAll || div.querySelectorAll(".TEST")|0)

я думаю пусть этим занимается обфускатор

monolithed 03.02.2012 09:21

Цитата:

Сообщение от devote
я думаю пусть этим занимается обфускатор

вообще я хотел сделать акцент на этом div = null;

devote 03.02.2012 10:18

Цитата:

Сообщение от monolithed
вообще я хотел сделать акцент на этом div = null;

как я заметил обфускатор вообще удаляет все эти div = null; считает что без них лучшее.

monolithed 03.02.2012 10:37

Цитата:

Сообщение от devote
как я заметил обфускатор вообще удаляет все эти div = null; считает что без них лучшее.

Я имею ввиду, то что нет смысла писать это выражение два раза

var hasQSA = (function() {
    var div = document.createElement('div');
    div.innerHTML = "<p class='TEST'></p>";

    if (!div.querySelectorAll || div.querySelectorAll(".TEST")|0)
        return 0;
    
    *!* 
    div = null; 
    */!*
    return 1;
})();

alert(hasQSA);

devote 03.02.2012 10:44

Цитата:

Сообщение от monolithed
Я имею ввиду, то что нет смысла писать это выражение два раза

да я понял к чему ты ведешь.

devote 14.03.2012 10:34

во время работы с селектором, обнаружил ошибку:
не искал по селекторам если они содержали слеш "\"

Качаем новую версию, в первом топике.

так же залил на github

FINoM 18.03.2012 01:13

Цитата:

Сообщение от devote
qsa.querySelectorAll( "div + p > a", document.getElemetById("myNode") );

Давно хотел узнать: а можно ли повесить в прототип html узла метод, чтоб работало в старых IE?
Если рассматривать эту библиотеку в качестве примера, то можно было-бы убрать контекст из второго аргумента.


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