мой движок ксс селекторов
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: случайное число} потом цикл по всем элеиментам на стр если з-индекс равен тому сл.числу то добавляем в масив |
Очень плохая идея.
z-Index уже вполне может использоватся для каких-либо элементов. а вы его внаглую меняете, и не возвращаете обратно |
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 вместо стандартного движка подниму им рейтинг там правда через сервер зделано ,придется попотеть |
Цитата:
|
вы не прочли мою первую часть сообщения.
нельзя вот так брать, и использовать z-index для сторонних целей и не надейтесь, что вам удастся воткнуть ваш говнокод в jQUery им, он нафиг не нужен |
Цитата:
а на счет говнокода и "никому ненужен" время покажет |
Цитата:
вы считаете, что за несколько десятков лет, никому еще не пришло в голову так делать? нужность, вы правы, может показать время. и время уже показало ненужность такой идеи. либо вы мессия а вот говнокод можно увидеть, не ожидая года, и мнение многих людей. Цитата:
и он попадет в список элементов Цитата:
теперь, вы еще больше наговнокодили. вы только что искусственно задали всем элементам z-index, не зависящий от таблицы стилей |
Цитата:
Цитата:
|
Опишите свою идею более подробно, а то не совсем ясно что вы вообще хотите сделать, может вам и не прийдется изобретать велосипед
Цитата:
Цитата:
Цитата:
|
Цитата:
есть задачи, где даже вероятность коллизий Md5 является слишком большой а вы тут говорите о такой гигантской величине как 0.1%!!! Может быть вы не в курсе, но за этими числами стоят потерянные деньги,и для некоторых сайтов тот факт, что каждый тысячный покупатель не сможет провести покупку из-за вашего говнокода - весьма немаловажный фактор достойный увольнения нескольких не уследивших разработчиков Цитата:
вам бы сначала подрасти в профессиональном уровне, а затем горы ворочать запустите этот код следующим образом: 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, выставляемое в конце - это абсолютно разные вещи. и последний до прихода вашей функции у большинства элементов равен пустой строке |
ну там можно то же подшаманить чтобы не глючило
через сервер зделать на пример,как в jquery только вы говорите что идея с з-индексом плохая а это нетак |
Цитата:
Относительно идеи ТС, я тоже не понимаю, чем может навредить установка z-index, а потом снятие его, а тестировать мне лень. Другое дело, что во-первых, у элемента в style может стоять z-index, и тогда его значение из стилей не узнать. А во-вторых, меня смущает recalc стилей, а может даже и reflow всей страницы, сопровождающий такой поиск. Matre, а зачем вы упоминаете какой-то сервер в своих сообщениях? |
Kolyaj,
по первому пункту согласен в общем случае. Цитата:
|
Цитата:
Цитата:
|
Цитата:
учите java script |
Цитата:
а затем показываю, какие проблемы возникают после вызова этого "движка" |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
а Gvozd мне говорил,что если так не зделать,то затрутся старые значения.так что это ему надо учить java script, извините. Gvozd, а с вас 500р. за то,что я написал 6 строк кода зря!! кошелек могу в лс скинуть или в асю как вам удобнее |
Цитата:
|
Мне почему-то это все Nemo напоминает
|
Цитата:
я не говорил, что каждому элементу нужно лично возвращать изначальный z-index Цитата:
Цитата:
а за некоторый, если бы вы его писали на заказ, вас бы еще и оштрафовать следовало бы на пару десятков баксов а вообще, повеселили))) |
Да что вы пристали к nemo. Он не смог бы до такого уровня грамотность подтянуть.
|
Цитата:
я его стал возвращать но вам все равно не нравится я следовал логике,а чему следуете вы,обсирая мои идеи как только можете,мне непонянто.может ,объясните? |
Цитата:
верный способ вам уже указал Kolyaj Цитата:
|
Порадовало Ваше желание прикрутить свой "супер движок" к jQuery. Только не забыли ли Вы, что jQ поддерживает много разных селекторов, причем некоторые из них стали поддерживаться браузерами совсем недавно (jQuery, напомню, позиционируется как кроссбраузерная библиотека), а некоторые так вообще являются выдумкой разработчиков и в CSS появляться не собираются.
|
jqueryвский движок много весит и там поиск по слекторам через сервер зделан..нагрузка на сайт и на клиента.а у меня код небольшой и сервер не испоьзует,так что думаю професионалы предпочтут мой движок.я так пониамаю это форум любителей,тут никто это неоценит
|
Цитата:
Цитата:
|
Цитата:
P.S. Да-да, сходите к профессионалам. |
Цитата:
|
B@rmaley.e><e я тут задумался а какие вы конкретно селекторы имели ввиду, если не сложно о:
Цитата:
|
Цитата:
:checkbox выбирает только элементы-флажки (input[type=checkbox]) :hidden - все скрытые элементы :submit, :visible и.т.д. |
Цитата:
в вот такие есть: 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>
|
А вот такой вот не работает 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>
|
мне кажется этот пример не совсем корректый, можно в каком-то случае заменить оператором > (хотя в примере ниже и без него можно обойтись)
<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>
|
Очень плохая идея делать через тег style, потому что CSS-3 селекторы поддерживаются всеми браузерами по разному, скажем в ИЕ нет тех которые уже реализованы в других. Не кроссбраузерно - следовательно пользы мало.
|
Maxman,
вы непонимаете,вся фишка в уникальном аглоритме. он позволяет писать css3-движки размером 1 КБ кгода css3 утвердят,мой двиг станет просто бомбой |
Цитата:
|
Maxman относительно css3-селекторов вы не совсем правы, а точнее в корне не правы!.
CSS3-псевдоклассы (типа :nth-child) уже давенько поддерживаются браузерами (за исключением IE), не говоря уже о CSS2-псевдоклассах (типа :first-line) CSS2-псевдоклассы поддерживаются даже IE (некоторые их них даже в IE6) CSS2-селекторы (о них шла речь, к примеру: input[type="text"]), почти все из поддерживается начиная с IE7+ CSS3-псевдоэлементы (::selection и пр.) поддердживают только Safari и Chrom, остальные реализуют через префиксы. Цитата:
Но на сколько мне известно, что IE9 является последним в линейке IE, в след. ОС они обещали предоставить совершенно новую модель браузеро (голосовое и сенсорное управление...). |
monolithed, вы сами привели примеры того, насколько они различаются по поддержке. Я просто имел ввиду что смысл движков типа Sizzle в том что они обеспечивают полную кроссбраузерность начиная с IE6 и старых версий других браузеров, + придуманные селекторы, чем движок Matre не может похвастаться, поэтому мала вероятность того что он станет бомбой :) Размер - да, но одно другому рознь.
Цитата:
|
| Часовой пояс GMT +3, время: 02:11. |