Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Carbon.JS JavaScript framework (https://javascript.ru/forum/project/7571-carbon-js-javascript-framework.html)

PeaceCoder 10.02.2010 17:33

Цитата:

Сообщение от Cr@ZyBoY
попридержите коней. Откуда у вас в html-коде взялось 2 элемента с одним id? Это прямое нарушение стандарта.

Прямое не прямое, querySelectorAll выдает то, что я написал.
Да и читал на webo.in, что строить стили на #id выгоднее + как вы не крутите а стили распространяются на все одинаковые #id а не на только первый попавшийся... Да и по вашим словам такой запрос вообще бессмыслен, а такое есть на самом деле.
Цитата:

Сообщение от Cr@ZyBoY
По поводу селектора "* SPAN I + SPAN DIV B + *"

Это я привел в пример, что бы было над чем подумать, если селектор будет содержать с одной или с другой стороны запрос вида "[atribute=abrakadabra]", то движок просто рухнет, если нет поддержки querySelectorAll, да и тест на то как работает "+" в чистом движке. Как видно в jQ неправильно.

Kolyaj 10.02.2010 17:54

Цитата:

Сообщение от PeaceCoder
строить стили на #id выгоднее

Чем? Кроме того, что поддерживать такую вёрстку труднее.

tenshi 10.02.2010 17:57

ой, кто заговорил о поддержке вёрстки х)) ты уж определись, либо мы постраиваемся под любую вёрстку, либо делаем вёртку, с которой удобно работать, но тогда сложные селекторы нафиг не сдались

Cr@ZyBoY 10.02.2010 17:58

PeaceCoder,
ну я же тоже не придумываю. http://www.w3.org/TR/2009/PR-css3-se.../#id-selectors
Цитата:

What makes attributes of type ID special is that no two such attributes can have the same value in a conformant document, regardless of the type of the elements that carry them; whatever the document language, an ID typed attribute can be used to uniquely identify its element.

PeaceCoder 10.02.2010 18:13

Проще говоря, querySelectorAll работает неправильно во всех браузерах? Сами подумайте или разработчики браузеров (таже мозилла, которая соблюдает стандарты) лоханулись, либо вы пургу несете.
Цитата:

Сообщение от Cr@ZyBoY
ну я же тоже не придумываю.

И я не придумываю. Ниже на пример посмотри
Цитата:

The following ID selector represents any element whose ID-typed attribute has the value "chapter1":

#chapter1

The following selector represents any element whose ID-typed attribute has the value "z98y".

*#z98y

Cr@ZyBoY 10.02.2010 18:37

Цитата:

no two such attributes can have the same value (2подобных атрибута не могут иметь одинаковое значение)
и
Цитата:

represents any element whose ID-typed attribute has the value (представляет любой элемент, id которого равен...)
не взаимозаменяемы. То что вы написали - правда, но из этого не следует, что в документе могут существовать 2 элемента с одним id. Id для того и придумали, чтобы у элемента был уникальный опознавательный знак.
Я бы не стал доверять querySelectorAll как образцу правильных выборок - http://ejohn.org/blog/thoughts-on-queryselectorall/. Не удивлюсь, если и с #id они тоже накосячили.

x-yuri 10.02.2010 18:58

Цитата:

Сообщение от PeaceCoder
Сами подумайте или разработчики браузеров (таже мозилла, которая соблюдает стандарты) лоханулись, либо вы пургу несете.

либо разработчики браузеров решили дать возможность получить все элементы с заданным id, либо пургу несешь ты ;)

Cr@ZyBoY,
Цитата:

Сообщение от tenshi
либо мы постраиваемся под любую вёрстку, либо делаем вёртку, с которой удобно работать, но тогда сложные селекторы нафиг не сдались


PeaceCoder 10.02.2010 18:58

Цитата:

Сообщение от Cr@ZyBoY
То что вы написали - правда, но из этого не следует, что в документе могут существовать 2 элемента с одним id.

Получается опять же все браузеры работают неправильно и отображают стили тоже не правильно? Не раз встречал сайты построенные на id'шниках, например #window и т.п. и что же получается стили применять надо только к первому в дереве элементу с этим id ? Нет. Как было описано выше стили применяются ко всем элементам с таким id ==> querySelectorAll работает тоже правильно и выводит все элементы с таким id. Еще читал, что qerySelectorAll это и есть движок того как браузер при прорисовке элемента получает для него все стили.
То что вы имеете ввиду, то это запрос вида "#id" и ничего больше. Вот он должен выводить только 1 элемент с первым попавшимся id в дереве. А если надо все элементы в таком же написании, то "*#id", но если фильтров в селекторе больше 1го, то уже явно должен быть список подходящих.
Цитата:

Сообщение от Cr@ZyBoY
Я бы не стал доверять querySelectorAll как образцу правильных выборок

Че вы вообще прицепились к Джону? У него селекторы немного багнуты, о чем я писал выше, о какой правильности может идти речь?

П.С. спорить на эту тему больше не буду. Каждый остается при своем мнении.
П.П.С В настоящем понимании id как таковой уже не имеет смысла, он аналогичен .class. Его давно ввели что бы можно было манипулировать элементами, сейчас же элементами можно манипулировать на прямую без id.

Cr@ZyBoY 10.02.2010 19:16

Я тоже не хочу спорить насчёт этого - я делал свой движок по стандарту, чётко описанному на сайте w3. Если
querySelectorAll возвращает несколько элементов с одним id, что ж, пусть возвращает, меня это мало волнует.

x-yuri,
я не собираюсь ни под кого подстраиваться - я предпочитаю работать как минимум с валидной вёрсткой.

PeaceCoder 10.02.2010 19:33

Цитата:

Сообщение от Cr@ZyBoY
Я тоже не хочу спорить насчёт этого - я делал свой движок по стандарту, чётко описанному на сайте w3.Если querySelectorAll возвращает несколько элементов с одним id, что ж, пусть возвращает, меня это мало волнует.

А вот тут вы противоречите себе. на запрос "#id3" Ваш движк выдает как раз таки 2 элемента, т.к. Вы не проверяете "простые" выборки, а используете querySelectorAll, который и выдает все элементы ;)

x-yuri 10.02.2010 22:42

Цитата:

Сообщение от PeaceCoder
То что вы имеете ввиду, то это запрос вида "#id" и ничего больше. Вот он должен выводить только 1 элемент с первым попавшимся id в дереве. А если надо все элементы в таком же написании, то "*#id", но если фильтров в селекторе больше 1го, то уже явно должен быть список подходящих.

ну-ну, а ты пробовал давать querySelectorAll эти два запроса? Или ты рассказываешь, как лоханулись производители браузеров?

Цитата:

Сообщение от PeaceCoder
П.П.С В настоящем понимании id как таковой уже не имеет смысла, он аналогичен .class. Его давно ввели что бы можно было манипулировать элементами, сейчас же элементами можно манипулировать на прямую без id.

ну для кого как. Когда ты что-то используешь не по назначение, рискуешь наискать себе проблем на свою... правильно, голову. Знать бы еще зачем? ;)

Цитата:

Сообщение от Cr@ZyBoY
x-yuri,
я не собираюсь ни под кого подстраиваться - я предпочитаю работать как минимум с валидной вёрсткой.

я тебя не заставляю. Просто при работе с невалидными документами у тебя могут быть проблемы. А нужно оно тебе или нет, решать тебе ;)

x-yuri 10.02.2010 22:46

Цитата:

Сообщение от PeaceCoder
А вот тут вы противоречите себе. на запрос "#id3" Ваш движк выдает как раз таки 2 элемента, т.к. Вы не проверяете "простые" выборки, а используете querySelectorAll, который и выдает все элементы

PeaceCoder, не противоречит. Cr@ZyBoY ложил на невалидные документы. Поэтому если у тебя невалидный документ и ты рассчитываешь получить один элемент, а не все, то...

tenshi 10.02.2010 23:58

поведение должно быть одинаковым в любых браузерах. а каким оно должно быть - да каким удобнее в использовании. аппелировать тут ко стандартам бессмысленно..

Riim 11.02.2010 00:49

Цитата:

Сообщение от PeaceCoder
Только Вы забыли что если кешировать простое число или строку то запись в кешированную переменную бессмысленна.

почему? Что такого должно быть в свойстве, чтобы кэширование стало выгодным?

PeaceCoder 11.02.2010 01:56

Цитата:

Сообщение от tenshi
поведение должно быть одинаковым в любых браузерах. а каким оно должно быть - да каким удобнее в использовании. аппелировать тут ко стандартам бессмысленно..

Как по мне так #id это еще один параметр фильтрации как и .class или [atribute=value]. По этому я не спорю.

П.С. Надюсь хоть [id=value] будет давать все элементы с id, а не только 1 ?
Цитата:

Сообщение от Riim
почему?

Потому что при записи в кеш-переменную, свойство у обьекта не изменится. А если производится сравнение свойства и при необходимости его изменение, то кеширование тут только даст минус.

П.С. Жаль что в JSe нет принудительной ссылочности, тогда бы кеш был бы уместен. Например
var a := obj.property
или 
var a = &obj.propery

где property может содержать даже число и при записи в а равносильно записи в свойство обьекта, но доступ к а в разы быстрее

x-yuri 11.02.2010 03:10

Цитата:

Сообщение от tenshi
поведение должно быть одинаковым в любых браузерах

почему? А если ты просто игнорируешь определнный вариант использования (ненужный), а кто захочет, тот ССЗБ. Почему нет?

Riim 11.02.2010 03:13

Цитата:

Сообщение от PeaceCoder
и при необходимости его изменение

про изменение и речи не было.

tenshi 11.02.2010 04:01

никогда не знаешь какой вариант может понадобиться..

scuter 26.05.2010 16:16

классно, мне понравилось.

newphp 01.06.2010 16:29

классно


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