Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему js думает что "100px"<"370px", а вот "39px">"370px"?
 
 автор: shkryab   (22.03.2007 в 02:42)   письмо автору
 
 

Почему js думает что "100px"<"370px", а вот "39px">"370px"?

   
 
 автор: CNT   (22.03.2007 в 03:52)   письмо автору
 
   для: shkryab   (22.03.2007 в 02:42)
 

Это смотря где :-)

Если "39px" и "370px" будут находиться там, где они определяют линейные размеры чего-то и определяют "нормально", то тогда JS "подумает" вполне правильно.

В иных случаях, например:

а) когда ширина всей таблицы указана в "39px", а ширина одной ячейки, входящей в состав этой таблицы, должна равняться "370px", JS засомневается в "нормальности" программёра, сие написавшего и построит таблицу не по бредовым указаниям, а исходя из своей - вполне "нормальной" - логики;

б) когда пытаются отсортировать по возрастанию значения, которые по типу являются явными строками - "39px" и "370px" - JS выполнит это действие над строками и действительно поставит строку "39px" выше, чем строку "370px". И это тоже будет вполне "нормально".


PS. В своё время г-н Даль записал для всех нас великую народную мудрость: "Неча на зеркало пенять, коли рожа крива"

   
 
 автор: shkryab   (22.03.2007 в 05:33)   письмо автору
 
   для: CNT   (22.03.2007 в 03:52)
 

Цэ координаты по у (...style.left) div-ов! Я пробовал и как строки сравнивать и как числа (из такого вида конвертировал), только всё тожесамое!

   
 
 автор: CNT   (22.03.2007 в 05:55)   письмо автору
 
   для: shkryab   (22.03.2007 в 05:33)
 

style.left - это то, что прописано в HTML-коде.

А жизненный опыт должен вам подсказать, что далеко не всегда за забором лежит именно то, что на этом самом заборе написано.
Во-первых, DIV'ы могли в процессе работы каких-то скриптов динамически "подвинуться" - в любом направлении.
Во-вторых, left - это всегда относительное значение положения объекта: пусть даже у него в стилях прописано position: absolute.

Для выяснения реального положения какого-либо object в JS надо каждый раз высчитывать абсолютные значения left и top, а именно:
var AbsLeft = AbsTop = 0;
while (object.offsetParent)
   {
   AbsLeft += object.offsetLeft;
   AbsTop += object.offsetTop;
   object = object.offsetParent;
   }


Полученные AbsLeft и AbsTop как раз и будут отражать ПОЧТИ реальные координаты [i]object'a[/b].

ПОЧТИ я выделил потому, что существуют ещё несколько условий, которые надо иметь в виду, проводя вычисления... Но, полагаю, до этого дойдёте сами... Не "дойдёте" - спрашивайте. Только поконкретнее, а не просто... ругая JS :-)

   
 
 автор: shkryab   (22.03.2007 в 16:37)   письмо автору
1.4 Кб
 
   для: CNT   (22.03.2007 в 05:55)
 

Что делает object.offsetParent;?
И ещё, посмотрите, пожалуйста, на то, что делаю (ещё, правда, до ума не доведено, но если всё сделаю как задумывал, должно получиться неплохо). И выскажете свои мнения по поводу того, как можно расставить zindex-ы! Чёт всё придумать не могу, что с ними делать!

   
 
 автор: Crux   (22.03.2007 в 06:00)   письмо автору
 
   для: shkryab   (22.03.2007 в 05:33)
 

координаты возвращаются в стринговом формате поэтому и сравниваются как строки (CNT пункт б)
прежде чем сравнивать их неообходимо перевести в тип Integer, для этого в JS есть parseInt(),
а потом уж их сравнивать.

 var left = "39px" // строка
left = parseInt(left) // число left = 39

   
 
 автор: shkryab   (22.03.2007 в 16:14)   письмо автору
 
   для: Crux   (22.03.2007 в 06:00)
 

Ну перед тем как открывать тему я пытался думать и этот вариант тоже пробовал. Но всёравно спасибо за внимание!

   
 
 автор: 12345   (22.03.2007 в 18:11)   письмо автору
 
   для: shkryab   (22.03.2007 в 16:14)
 

> и этот вариант тоже пробовал

Пробуем ещё раз:
 <script>alert(["39px">"370px",parseInt("39px")>parseInt("370px")])</script>

   
 
 автор: shkryab   (22.03.2007 в 18:28)   письмо автору
 
   для: 12345   (22.03.2007 в 18:11)
 

Так работает! А вот в скрипте, что сообщению выше прикриплён, не работало! Или это я ступил и файл не сохранил перед просмотром...

   
 
 автор: 12345   (22.03.2007 в 18:45)   письмо автору
 
   для: shkryab   (22.03.2007 в 18:28)
 

Там нет ни одной операции сравнения с подобным.

document.getElementById(menu[i][0][0]).style.left = y + z/10;
document.getElementById(menu[i][0][0]).style.top = 100 + Math.cos(menu[i][0][2]*Math.PI/180)*15;
- здесь надо всегда писать вида (100 + Math.cos(menu[i][0][2]*Math.PI/180)*15)+'px' , иначе в FF работать не будет.

   
 
 автор: shkryab   (22.03.2007 в 19:15)   письмо автору
 
   для: 12345   (22.03.2007 в 18:45)
 

Спасибо! Сам бы не додумался ибо мой FF всё проглатил и не возник!

   
 
 автор: 12345   (22.03.2007 в 19:42)   письмо автору
 
   для: shkryab   (22.03.2007 в 19:15)
 

Не будет, если стоит доктайп (правильный любой).

   
 
 автор: shkryab   (22.03.2007 в 20:10)   письмо автору
 
   для: 12345   (22.03.2007 в 19:42)
 

А насчёт того как праввильно zindex-ы расставить соображений нет?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования