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, выставляемое в конце - это абсолютно разные вещи.
и последний до прихода вашей функции у большинства элементов равен пустой строке


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