Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   мой движок ксс селекторов (https://javascript.ru/forum/project/14240-mojj-dvizhok-kss-selektorov.html)

Matre 07.01.2011 19:49

мой движок ксс селекторов
 
function findelements(selector){
elem=[];
style=document.createElement('div');
rand=Math.floor(Math.random() * 1000);
style.innerHTML='<style>'+selector+'{z-index: ' + rand + '}</style>';
document.body.appendChild(style);
all=document.getElementsByTagName('*');
for(var i=0;i<all.length;i++)
{
if(window.getComputedStyle)
z=window.getComputedStyle(all[i],null).zIndex;
else
z=all[i].currentStyle.zIndex;
if (z==rand)
{
elem.push(all[i]);
}
}
return elem;
}


старался обьединить быстродейтсвие и краткость кода
оцените
принцип такой:
создаём style тег туда пишем
(заданый селектор) {z-index: случайное число}
потом цикл по всем элеиментам на стр
если з-индекс равен тому сл.числу то добавляем в масив

Gvozd 07.01.2011 20:01

Очень плохая идея.
z-Index уже вполне может использоватся для каких-либо элементов.
а вы его внаглую меняете, и не возвращаете обратно

Matre 07.01.2011 20:06

function findelements(selector){
all=document.getElementsByTagName('*');
for(var i=0;i<all.length;i++)
{
if(window.getComputedStyle)
all[i].defaultzindex=window.getComputedStyle(all[i],null).zIndex;
else
all[i].defaultzindex=all[i].currentStyle.zIndex;
}
elem=[];
style=document.createElement('div');
rand=Math.floor(Math.random() * 1000);
style.innerHTML='<style>'+selector+'{z-index: ' + rand + '}</style>';
document.body.appendChild(style);
for(var i=0;i<all.length;i++)
{
if(window.getComputedStyle)
z=window.getComputedStyle(all[i],null).zIndex;
else
z=all[i].currentStyle.zIndex;
if (z==rand)
{
elem.push(all[i]);
}
all[i].style.zIndex=all[i].defaultzindex;
}
return elem;
}


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

Vulkan 07.01.2011 20:11

Цитата:

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

Без комментариев :) Уважаемый, какой сервер? Вы хоть знаете сколько существует разных фреймворков и что алгоритмы селекторов перерабатываются десятки раз, а уж то что вы своим поднимите рейтинг jquery ...

Gvozd 07.01.2011 20:11

вы не прочли мою первую часть сообщения.
нельзя вот так брать, и использовать z-index для сторонних целей

и не надейтесь, что вам удастся воткнуть ваш говнокод в jQUery
им, он нафиг не нужен

Matre 07.01.2011 20:15

Цитата:

нельзя вот так брать, и использовать z-index для сторонних целей
почему?я ведь всё на место возращаю,до и после вызова функции никаких изменений нет!

а на счет говнокода и "никому ненужен" время покажет

Gvozd 07.01.2011 20:26

Цитата:

Сообщение от Matre
а на счет говнокода и "никому ненужен" время покажет

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

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

Сообщение от Matre
rand=Math.floor(Math.random() * 1000);

это значение вполне может быть уже использовано каким-либо элементом.
и он попадет в список элементов
Цитата:

Сообщение от Matre
all[i].style.zIndex=all[i].defaultzindex;

замечательно
теперь, вы еще больше наговнокодили.
вы только что искусственно задали всем элементам z-index, не зависящий от таблицы стилей

Matre 07.01.2011 20:33

Цитата:

это значение вполне может быть уже использовано каким-либо элементом.
вероятность этого 0.1% ненадо надеятся на худшее! будьте оптимистичнее

Цитата:

вы только что искусственно задали всем элементам z-index, не зависящий от таблицы стилей
не понимаю..я ведь в начале беру заданные z-index а потом меняю обратно все ведь зависит

monolithed 07.01.2011 20:47

Опишите свою идею более подробно, а то не совсем ясно что вы вообще хотите сделать, может вам и не прийдется изобретать велосипед
Цитата:

Сообщение от Matre
сейчас пытаюсь вставить его в jquery вместо стандартного движка

если jQuery является OpenSource проектом это не значит, что туда можно вставить (в базовую сборку) любой говнокод (желающих как грязи, в разы больше чем на пост президента :D).
Цитата:

Сообщение от Matre
вероятность этого 0.1% ненадо надеятся на худшее! будьте оптимистичнее

у вас явно с восприятием информации проблемы, прислушайтесь к тому что вам говорят.
Цитата:

Сообщение от Matre
не понимаю..я ведь в начале беру заданные z-index а потом меняю обратно все ведь зависит

с чего вы это взяли?

Gvozd 07.01.2011 20:48

Цитата:

Сообщение от Matre
вероятность этого 0.1% ненадо надеятся на худшее! будьте оптимистичнее

в программирование не должно быть "авось прокатит"
есть задачи, где даже вероятность коллизий Md5 является слишком большой
а вы тут говорите о такой гигантской величине как 0.1%!!!
Может быть вы не в курсе, но за этими числами стоят потерянные деньги,и для некоторых сайтов тот факт, что каждый тысячный покупатель не сможет провести покупку из-за вашего говнокода - весьма немаловажный фактор достойный увольнения нескольких не уследивших разработчиков


Цитата:

Сообщение от Matre
не понимаю..я ведь в начале беру заданные z-index а потом меняю обратно все ведь зависит

вот именно, что не понимаете.
вам бы сначала подрасти в профессиональном уровне, а затем горы ворочать
запустите этот код следующим образом:
1)нажмите ссылку "change z-index"
нижний логотип станет поверх второго
после перезагрузите страницу
2)нажмите сперва ссылку "findelements", а затем только "change z-index"
как видим после вашей функции, остальной код не работает так как ожидалось


<html>
<head>
<script type="text/javascript">
function findelements(selector){
all=document.getElementsByTagName('*');
for(var i=0;i<all.length;i++)
{
if(window.getComputedStyle)
all[i].defaultzindex=window.getComputedStyle(all[i],null).zIndex;
else
all[i].defaultzindex=all[i].currentStyle.zIndex;
}
elem=[];
style=document.createElement('div');
rand=Math.floor(Math.random() * 1000);
style.innerHTML='<style>'+selector+'{z-index: ' + rand + '}</style>';
document.body.appendChild(style);
for(var i=0;i<all.length;i++)
{
if(window.getComputedStyle)
z=window.getComputedStyle(all[i],null).zIndex;
else
z=all[i].currentStyle.zIndex;
if (z==rand)
{
elem.push(all[i]);
}
all[i].style.zIndex=all[i].defaultzindex;
}
return elem;
}

</script>
<style>
.img1{
	position:absolute;
	left:10px;
	top:10px;
	z-index:5;
}
.img1_new{
	position:absolute;
	left:10px;
	top:10px;
	z-index:7;
}
.img2{
	position:absolute;
	left:20px;
	top:20px;
	z-index:6;
}
</style>
</head>
<body>
<img id="img1" class="img1" height="44" width="100" border="0" alt="Яндекс" src="data:image/png;base64,iVBOR....ggg==">
<img class="img2" height="44" width="100" border="0" alt="Яндекс" src="data:image/png;base64,iVB...rkJggg==">
<br /><br /><br /><br /><br /><br /><br />
<a href="#" onclick="findelements('a');return false;">findelements</a>
<a href="#" onclick="document.getElementById('img1').className='img1_new';return false;">change z-index</a>

</body>
</html>


PS getComputedStyle который вы берете в начале, и свойство style.zIndex, выставляемое в конце - это абсолютно разные вещи.
и последний до прихода вашей функции у большинства элементов равен пустой строке

Matre 07.01.2011 20:54

ну там можно то же подшаманить чтобы не глючило
через сервер зделать на пример,как в jquery
только вы говорите что идея с з-индексом плохая
а это нетак

Kolyaj 07.01.2011 21:04

Цитата:

Сообщение от Gvozd
не надо из себя строить непризнанного гения.
вы считаете, что за несколько десятков лет, никому еще не пришло в голову так делать?

Безотносительно идеи ТС, никогда не понимал таких рассуждений. Знал я одного человека, который на все 100% был уверен, что всё уже придумано до нас, и что ничего нового уже придумать нельзя. Ну прям как британская академия наук до Энштейна. Говорили мы с ним об этом до того, как взлетел facebook/вконтакте, до того, как придумали twitter и даже до того, как Резиг очень хреново написал свой jQuery. Причём Резиг как раз не придумал, никаких новых идей в jQuery не было, кроме архитектуры. Вобщем когда-то давно мы об этом говорили, а новые вещи всё появляются и появляются. С алгоритмами то же самое.

Относительно идеи ТС, я тоже не понимаю, чем может навредить установка z-index, а потом снятие его, а тестировать мне лень.
Другое дело, что во-первых, у элемента в style может стоять z-index, и тогда его значение из стилей не узнать. А во-вторых, меня смущает recalc стилей, а может даже и reflow всей страницы, сопровождающий такой поиск.

Matre,
а зачем вы упоминаете какой-то сервер в своих сообщениях?

Gvozd 07.01.2011 21:08

Kolyaj,
по первому пункту согласен в общем случае.

Цитата:

Сообщение от Kolyaj
Относительно идеи ТС, я тоже не понимаю, чем может навредить установка z-index, а потом снятие его, а тестировать мне лень.

протестируйте мой пример, как я описал

Kolyaj 07.01.2011 21:12

Цитата:

Сообщение от Gvozd
протестируйте мой пример, как я описал

Я не понял смысла вот этого.

Цитата:

Сообщение от Gvozd
06 for(var i=0;i<all.length;i++)
07 {
08 if(window.getComputedStyle)
09 all[i].defaultzindex=window.getComputedStyle(all[i],null).zIndex;
10 else
11 all[i].defaultzindex=all[i].currentStyle.zIndex;
12 }


Matre 07.01.2011 21:14

Цитата:

Я не понял смысла вот этого.
тут в переменную записывается старый з-индекс,чтобы потом достать его и установить обратно

учите java script

Gvozd 07.01.2011 21:15

Цитата:

Сообщение от Kolyaj
Я не понял смысла вот этого.

это я скопировал актуальную версию движка ТС-а
а затем показываю, какие проблемы возникают после вызова этого "движка"

Gvozd 07.01.2011 21:16

Цитата:

Сообщение от Matre (Сообщение 86707)
тут в переменную записывается старый з-индекс,чтобы потом достать его и установить обратно

учите java script

ЛОЛ!!!!:lol:

Kolyaj 07.01.2011 21:19

Цитата:

Сообщение от Matre
тут в переменную записывается старый з-индекс,чтобы потом достать его и установить обратно

А зачем? При удалении правила он сам восстановится.

Цитата:

Сообщение от Matre
учите java script

Ок.

Matre 07.01.2011 21:29

Цитата:

А зачем? При удалении правила он сам восстановится.
да?
а Gvozd мне говорил,что если так не зделать,то затрутся старые значения.так что это ему надо учить java script, извините.

Gvozd, а с вас 500р. за то,что я написал 6 строк кода зря!! кошелек могу в лс скинуть или в асю как вам удобнее

Kolyaj 07.01.2011 21:34

Цитата:

Сообщение от Matre
Gvozd, а с вас 500р. за то,что я написал 6 строк кода зря!!

Вы очень переоцениваете свой труд в качестве JS-программиста :)

monolithed 07.01.2011 21:36

Мне почему-то это все Nemo напоминает

Gvozd 07.01.2011 21:37

Цитата:

Сообщение от Matre
а Gvozd мне говорил,что если так не зделать,то затрутся старые значения.так что это ему надо учить java script, извините.

сначала читать научитесь.
я не говорил, что каждому элементу нужно лично возвращать изначальный z-index
Цитата:

Сообщение от Gvozd
а вы его внаглую меняете, и не возвращаете обратно



Цитата:

Сообщение от Matre
Gvozd, а с вас 500р. за то,что я написал 6 строк кода зря!! кошелек могу в лс скинуть или в асю как вам удобнее

пока что весь код, что вы написали на форум не стоит и рубля.
а за некоторый, если бы вы его писали на заказ, вас бы еще и оштрафовать следовало бы на пару десятков баксов
а вообще, повеселили)))

Kolyaj 07.01.2011 21:39

Да что вы пристали к nemo. Он не смог бы до такого уровня грамотность подтянуть.

Matre 07.01.2011 21:44

Цитата:

я не говорил, что каждому элементу нужно лично возвращать изначальный z-index
Сообщение от Gvozd
а вы его внаглую меняете, и не возвращаете обратно
вы мне указали,что я не возвращаю з-индекс на место
я его стал возвращать
но вам все равно не нравится
я следовал логике,а чему следуете вы,обсирая мои идеи как только можете,мне непонянто.может ,объясните?

Gvozd 07.01.2011 21:52

Цитата:

Сообщение от Matre
вы мне указали,что я не возвращаю з-индекс на место
я его стал возвращать

вы стали делать это неверным способом
верный способ вам уже указал Kolyaj
Цитата:

Сообщение от Matre
я следовал логике

да ну?)

B@rmaley.e><e 08.01.2011 16:39

Порадовало Ваше желание прикрутить свой "супер движок" к jQuery. Только не забыли ли Вы, что jQ поддерживает много разных селекторов, причем некоторые из них стали поддерживаться браузерами совсем недавно (jQuery, напомню, позиционируется как кроссбраузерная библиотека), а некоторые так вообще являются выдумкой разработчиков и в CSS появляться не собираются.

Matre 08.01.2011 16:45

jqueryвский движок много весит и там поиск по слекторам через сервер зделан..нагрузка на сайт и на клиента.а у меня код небольшой и сервер не испоьзует,так что думаю професионалы предпочтут мой движок.я так пониамаю это форум любителей,тут никто это неоценит

Kolyaj 08.01.2011 17:21

Цитата:

Сообщение от Matre
я так пониамаю это форум любителей

Шёл бы уже на форум профессионалов, а то надоело чепуху читать, вроде
Цитата:

Сообщение от Matre
поиск по слекторам через сервер зделан

Больший бред придумать сложно.

B@rmaley.e><e 08.01.2011 17:34

Цитата:

Сообщение от Matre
поиск по слекторам через сервер зделан

*facepalm*

P.S. Да-да, сходите к профессионалам.

Sweet 08.01.2011 17:37

Цитата:

Сообщение от Matre
jqueryвский движок много весит и там поиск по слекторам через сервер зделан..нагрузка на сайт и на клиента.а у меня код небольшой и сервер не испоьзует,так что думаю професионалы предпочтут мой движок.я так пониамаю это форум любителей,тут никто это неоценит

:lol: Я не могу понять, он прикалывается или серьезно. Matre, признайся, ты просто прикалываешься!

monolithed 08.01.2011 17:38

B@rmaley.e><e я тут задумался а какие вы конкретно селекторы имели ввиду, если не сложно о:
Цитата:

Сообщение от B@rmaley.e><e
а некоторые так вообще являются выдумкой разработчиков и в CSS появляться не собираются.


Shaci 08.01.2011 19:50

Цитата:

Сообщение от monolithed (Сообщение 86867)
B@rmaley.e><e я тут задумался а какие вы конкретно селекторы имели ввиду, если не сложно о:

а случайно не вот такие?
:checkbox
выбирает только элементы-флажки (input[type=checkbox])
:hidden - все скрытые элементы
:submit, :visible и.т.д.

monolithed 08.01.2011 20:00

Цитата:

Сообщение от Shaci
а случайно не вот такие?

на счет этих hidden/visible, вполне логично их нет в спецификации CSS3 селекторов))

в вот такие есть:
input[type="checkbox"]

UPD:
<style type="text/css">
input[type="text"], input[type="checkbox"], input[type="submit"] {
    border: 1px solid red;
}
</style>
<input type="text" />
<input type="checkbox" />
<input type="submit" />

<input type="checkbox" checked="checked" />
<script type="text/javascript">
document.querySelector('input[type="checkbox"]:checked').onclick = function(){alert('clicked')};
</script>

Shaci 08.01.2011 21:52

А вот такой вот не работает li:has(ul) , (в jquery с ним можно работать)
интересно а есть ему аналог?

<style type = 'text/css'>
li:has(ul) {
color:red;
}

li ul {
color:blue;
}

</style>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3
<ul>
<li>Item 3.1</li>
<li>Item 3.2</li>
</ul>
</li>
</ul>

monolithed 08.01.2011 22:34

мне кажется этот пример не совсем корректый, можно в каком-то случае заменить оператором > (хотя в примере ниже и без него можно обойтись)


<style type='text/css'>
li ul {
    color:blue;
}
    
li ul li ul > li {
    color:red;
}
</style>

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>
        <ul>
            <li>Item 3.1</li>
            <li>Item 3.2</li>
            <li>
                <ul>
                    <li>Item 4.1</li>
                    <li>Item 4.2</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

Maxman 10.01.2011 20:26

Очень плохая идея делать через тег style, потому что CSS-3 селекторы поддерживаются всеми браузерами по разному, скажем в ИЕ нет тех которые уже реализованы в других. Не кроссбраузерно - следовательно пользы мало.

Matre 10.01.2011 20:38

Maxman,
вы непонимаете,вся фишка в уникальном аглоритме.
он позволяет писать css3-движки размером 1 КБ
кгода css3 утвердят,мой двиг станет просто бомбой

Maxman 10.01.2011 20:56

Цитата:

Сообщение от Matre (Сообщение 87254)
кгода css3 утвердят

Когда станет поддерживаться везде одинаково - неизвестно, хотя судя по тому как развивается ИЕ, думаю очень не скоро. А пока какой смысл от него? С таким успехом можно просто юзать querySelectorAll()

monolithed 10.01.2011 22:10

Maxman относительно css3-селекторов вы не совсем правы, а точнее в корне не правы!.

CSS3-псевдоклассы (типа :nth-child) уже давенько поддерживаются браузерами (за исключением IE), не говоря уже о CSS2-псевдоклассах (типа :first-line)

CSS2-псевдоклассы поддерживаются даже IE (некоторые их них даже в IE6)

CSS2-селекторы (о них шла речь, к примеру: input[type="text"]), почти все из поддерживается начиная с IE7+

CSS3-псевдоэлементы (::selection и пр.) поддердживают только Safari и Chrom, остальные реализуют через префиксы.

Цитата:

Сообщение от Maxman
судя по тому как развивается ИЕ, думаю очень не скоро.

IE как раз таки развивается лучше чем все остальные (вместе взятые! ), если не в курсе. И на сегодняшний день IE9 осущесвляет практически поддержку HTML5/CSS3/SVG1.1/DOM

Но на сколько мне известно, что IE9 является последним в линейке IE, в след. ОС они обещали предоставить совершенно новую модель браузеро (голосовое и сенсорное управление...).

Maxman 10.01.2011 23:10

monolithed, вы сами привели примеры того, насколько они различаются по поддержке. Я просто имел ввиду что смысл движков типа Sizzle в том что они обеспечивают полную кроссбраузерность начиная с IE6 и старых версий других браузеров, + придуманные селекторы, чем движок Matre не может похвастаться, поэтому мала вероятность того что он станет бомбой :) Размер - да, но одно другому рознь.
Цитата:

Сообщение от monolithed (Сообщение 87277)
в след. ОС они обещали предоставить совершенно новую модель браузеро (голосовое и сенсорное управление...).

Я вас умоляю... Вы верите что они смогут сделать что-то стоящее, где багов было бы меньше чем в альтернативном ПО от OpenSource разработчиков?


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