Парсинг селекторов 
		
		
		
		Привет всем. Написал регу для раскладки селектора по частям 
	
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, время: 09:14. |