Парсинг селекторов
Привет всем. Написал регу для раскладки селектора по частям
var scanSelector = prompt("Enter selector: ", '#cssplay > ns|a.p1:active .p4 img[src=".png\\\\"], a|ns[rel="te\\"]st\\\\"]:not(div[test="name"])'), rega = /\s*(?:(\*|(?:(?:\*|[\w\-]+)\|)?[\w\-]+))?(?:\[\s*(?:((?:[\w\-]+\|)?[\w\-]+)\s*((?:~|\^|\$|\*|\|)?=)\s*)?((?:".*?(?:(?:[\\]{2}(?="))|[^\\])"|'.*?(?:(?:[\\]{2}(?='))|[^\\])'|[^"'].*?)?)\s*\])?(?:(\.|#)([\w\-]+))?(?:(:(?::)?)([\w\-]+)(?:\(\s*([^\s,]+)\s*\))?)?(?:(?:\s*(?=\s))?(?:(?:\s(?=,|>|\+|~))?([\s,>+~](?!$)))?)?/g, nm = [ "Fragment: ", "Tag name: ", "Attribute name: ", "Condition type: ", "Attribute name/value: ", "Id or Class prefix: ", "Id or Class name: ", "Pseudo type: ", "Pseudo name: ", "Pseudo content: ", "Next search type: " ], m = null, s = "CSS Selector: " + scanSelector + "\n\n", lastIndex = 0; rega.lastIndex = 0; do { lastIndex = rega.lastIndex; m = rega.exec( scanSelector ); for(var i = 0; i < m.length; i++ ) { s += nm[ i ] + "'" + m[ i ] + "'\n"; } s += "\n"; } while( ( lastIndex < rega.lastIndex ) && ( rega.lastIndex < scanSelector.length ) ); alert( s ); Помогите найти какой нить необычный селектор, который эта рега просто не захочет скушать. СПС |
#cssplay > a.p1:active .p4 img[src=.png][name=xxx]
|
Pavel M.,
Спасибо, данный селектор принимается нормуль. P.S. Признаюсь честно даже не пробовал подобный вбивать, но как не удивительно, норм его принимает. |
Не понимает пространства имен:
ns:tag[attr:name=123] |
B~Vladi,
хм... в спецификации о них я что-то не видел текста... Если не затруднит, ткните меня в данный раздел плиз... Но подумаю над этим. Спасибо большое! |
А нашел в спецификации, да вы правы есть такое, что-то упустил я их
|
devote, регу по именам тегов и имен/значений атрибутов можешь взять тут.
|
#cssplay > a.p1:active .p4 img[src=".png\\"]
Attribute name/value: 'src=".png\\"' C этой проблемой я столкнулся когда делал свои селекторы. |
Цитата:
|
Цитата:
|
devote,
<a rel="a\\">lalala</a> <script> var a = prompt("C'on!", ''); alert(document.querySelectorAll(a).length) </script>Вводить a[rel="a\\\\"] |
B@rmaley.e><e,
не спорю что слешов нужно побольше что бы приняло... да я в курсе что с этим траблы |
B@rmaley.e><e,
Если не сложно, поясни в спецификации я верно понял что namespaces используется через знак '|' или я что-то там не понял? |
Цитата:
|
devote, судя по примерам в сети и спецификации, да.
|
Поправил регу на первой странице, вроде все ваши замечания исправил.
|
Цитата:
Да парсер не плох. ток вот самый прикол начнется когда начнете реализовывать поиск... |
Цитата:
|
Позволю себе поднять тему. Хотел спросить, какие селекторы вы используете чаще всего в своих проектах?
|
#
. <tagname> :hover :first-child |
Цитата:
Цитата:
Если будешь писать модуль выборки элементов по селекторам, выложи, пожалуйста, свой код. Только просьба, не нужно делать очередной сиззл. То, что предоставляется querySelector вполне достаточно. |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
нет, просто спросил к тому чтобы оптимизировать свой движок в ИЕ на тех моментах которые чаще требуются, так как для новых браузеров как правило используется внутренний querySelectorAll а вот для ИЕ увы нужен собственный.
Цитата:
|
devote, у меня просьба, выложи движок выборки по селектору отдельно от основного проекта, если, конечно, проект опенсорц.
|
Цитата:
|
Ок, спасибо.
|
devote,
Подавилась этим: /\s*(?:(\*|(?:(?:\*|[\w\-]+)\|)?[\w\-]+))?(?:\[\s*(?:((?:[\w\-]+\|)?[\w\-]+)\s*((?:~|\^|\$|\*|\|)?=)\s*)?((?:".*?(?:(?:[\\]{2}(?="))|[^\\])"|'.*?(?:(?:[\\]{2}(?='))|[^\\])'|[^"'].*?)?)\s*\])?(?:(\.|#)([\w\-]+))?(?:(:(?::)?)([\w\-]+)(?:\(\s*([^\s,]+)\s*\))?)?(?:(?:\s*(?=\s))?(?:(?:\s(?=,|>|\+|~))?([\s,>+~](?!$)))?)?/g.exec('div.vasea[aaaa="tttt"]') |
Цитата:
|
Цитата:
|
Только по имени класса, иногда каскад из двух классов.
|
Цитата:
|
Цитата:
|
ну во-первых не засоряется "глобальное пространство имен", во-вторых, я не говорил, что специфичные компоненты должны мешать кому-то на этой странице, в-третьих, не понимаю как связана специфичность компонента с контексто-независимостью. По-крайней мере я не предлагал делать его зависящим от контекста.
а как ты поступаешь с контентом который изначально генерируется статически, а потом к нему надо добавить js-функциональность? Например, текстовое поле, выпадающий список для которого подгружается через ajax. Либо, например, кроссбраузерная поддержка атрибута placeholder. По идее, твои компоненты предполагают, что при создании они создают html-код, а не привязываются к существующему. |
Цитата:
Предлагаю привязываться к пространствам имен (использование кастомных тегов и атрибутов, xhtml). Никто никому не мешает и все счастливы :) Спасибо, продолжайте :write: |
по поводу засорения глобального пространства имен я говорю в первую очередь с той точки зрения, что в одном случае, ты знаешь, что компонент используется только на одной странице, во втором таких предположений делать нельзя.
|
Давай тогда определимся: чем специфичный компонент может отличаться от расшаренного компонента.
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 14:29. |