Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2009, 19:58
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

Непонятный глюк
function level(level){
var url="img/l"+level+".gif";
var code=level+'<div style="background-image:url('+"'"+url+"'"+');" class="leveltddiv">'+level+'/10</div>';
return code;
}

function myGetElementsByClassName(str){var list = new Array();var nodes = document.getElementsByTagName('*');for (i = 0; i<nodes.length; i++){if (nodes[i].nodeType==1){if (nodes[i].className.indexOf(str)!=-1 ){list.push(nodes[i]);}}}return list;}

function showHint(show,text,e){
var obj=document.getElementById('tooltip');
if(show==true){
obj.innerHTML=text;

var browserName=new String(navigator.appName);

if(browserName.indexOf('IE')!=-1){
var html = document.documentElement;
xMove=html.scrollLeft;
yMove=html.scrollTop;
}
else{
if(navigator.appName.indexOf('Opera')!=-1){
var html = document.documentElement;
xMove=html.scrollLeft;
yMove=html.scrollTop;
}
else{
xMove=window.screenX;
yMove=window.screenY;
}

}

obj.style.display='block';
obj.style.position='fixed';
obj.style.left=(e.clientX+5)+'px';
obj.style.top=(e.clientY+5)+'px';
}
else{
obj.style.display='none';
}
}

function repl(text){
var out=new String(text);
var index=out.indexOf('hint:')+5;
out=out.substr(index,out.length-index);
return out;
}

function initialize(){
 var arr=myGetElementsByClassName('leveltd');
 for(i=0;i<arr.length;i++){ var obj=arr[i];obj.innerHTML=level(obj.innerHTML); }

 var tt=document.createElement('div');
 tt.id='tooltip';
 document.body.appendChild(tt);
 
 var arr=document.getElementsByTagName('*');
 
 j=0;
 for(i=1;i<arr.length;i++){
  var obj=arr[i];
  j++;
  document.getElementById('tooltip').innerHTML=j;
  if(obj.title){
   var hint=new String(obj.title);
   obj.title='';
   obj.className+=',hint:'+hint;
   var text=obj.innerHTML;
   if(obj.innerHTML!=''){
   obj.innerHTML='<div onmousemove=\"showHint(true,repl(this.parentNode.className),event);\" onmouseout=\"showHint(false);\">'+text+'<\/div>';
   }
  }
 }
}


<html>
<head>
...
<script src="путь к вышеуказанному скрипту"></script>
....
</head>
<body onload="initialize();">
<script type="text/javascript" src="scripts/sorttable.js"></script>

<table class="sort" align="center">
<thead>
<tr>
<td>Название</td>
<td>Категория</td>
<td>Уровень</td>
</tr>
</thead>
<tbody>
<tr>
<td title="Весьма неплохой язык для создания десктопных приложений.&lt;br \/&gt;Позволяет быстро строить базы данных и различные утилиты почти любого уровня сложности.">
 delphi
</td><td title="Создание программ почти любого профиля - от баз данных до игр и вирусов">
 <span title="Создание почти любых приложений - от баз данных до вирсов и системных утилит">Общее программирование</span>
</td><td class="leveltd">9</td></tr>
<tr><td title="Прекрано подходят для попыток создания кроссплатформенных программ, т.к. их варианты существуют если не для всех, то почти для всех популярных ОС, т.е. при правильном проектировании программу можно перенести на многие ОС">
 C,C++
</td><td>
 <span title="Создание почти любых приложений - от баз данных до вирсов и системных утилит">Общее программирование</span>
</td><td class="leveltd">8</td></tr>
<tr><td title="Языки (на мой взгляд) мало пригодны для создания серьёзных программ, но часто используются в мелких проектах. Также важны т.к. именно их импользет некоторе количество программистов">
 BASIC,VB,VB.NET
</td><td>
 <span title="Создание почти любых приложений - от баз данных до вирсов и системных утилит">Общее программирование</span>
</td><td class="leveltd">10</td></tr>

<tr><td title="Весьма нелохо подходят для создания серверной части веб-приложений из-за :&lt;br \/&gt;1) доступности (почти все хостинг-провайдры позволяют использовать эту связку&lt;br \/&gt;2) универсальности - можно создавать веб-приложения любого типа">
 PHP &amp; MySQL
</td><td>
 <span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span>
</td><td class="leveltd">8</td></tr>
<tr><td title="Язык в основном используется для написания веб приложений или консольным программ. Мощный, но сложный язык. Большинство часто нужных его возможностей можно реализоватьи н на PHP">
 PERL
</td><td>
 <span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span>
</td><td class="leveltd">5</td></tr>
<tr><td title="Язык используется для создания флеш-заставок, приложений и сатов. Также не редко используется по техническим причинам.">
 ActionScript
</td><td>
 <span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span>
</td><td class="leveltd">7</td></tr>
<tr><td title="Язык используется для динамического изменения веб-страниц в процессе их работы. Например - вывод информации, получаемой от сервера через определённые промежутки времени.">
 JavaScript
</td><td>
 <span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span>
</td><td class="leveltd">8</td></tr>
<tr><td title="Язык используется для динамического изменения веб-страниц в процессе их работы. Например - вывод информации, получаемой от сервера через определённые промежутки времени.">
 VBScript
</td><td>
 <span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span>,<span title="Надоело запускать программы по 20 раз подряд с оддинаковыми паметрами?. Тогда это - то, что надо">Автоматизация простых задач под Windows</span>
</td><td class="leveltd">7</td></tr>

<tr><td title="Система технологий для описания структуры и дизайна веб-страницы">HTML(DHTML) &amp; CSS</td><td><span title="Создание интерактивных веб-сайтов (соц.сети, форумы, и т.д.) а также более специлизированных веб-приложений, таких как Google.Документы и прочие.">Веб-программирование</span></td><td class="leveltd">10</td></tr>
<tr><td title="Автоматизированная командная строка">BAT</td><td><span title="Надоело запускать программы по 20 раз подряд с оддинаковыми паметрами?. Тогда это - то, что надо">Автоматизация простых задач под Windows</span></td><td class="leveltd">9</td></tr>
</tbody>
</table>
</body>
</html>


Итак. Скрипт делает вот что - во всех элементах с классом leveltd вместо указанной цифры отображает шкалу из div-a с текстом и шкалой в фоне. А также находит все элементы с title и удаляет им title, дописывая в className им что - то типа hint:содержимое title. После чего всем этим элементам ставит в onmousemove="showHint(true,repl(this.className),ev ent);" а в onmouseout="showHint(false);". Это в теории. Т.к. в IE никакое нормальное назначение событий не пахало, то он добавляет в элемент div который в onmousemove подсовывает className родителя.

Должно быть, есть.

Почему бы плыли td со шкалами?

Последний раз редактировалось Octane, 22.09.2009 в 22:03. Причина: слишком большие изображения
Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2009, 11:24
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

JavaScript - 8, DHTML - 10... Может сам разберёшся?
Ответить с цитированием
  #3 (permalink)  
Старый 23.09.2009, 12:32
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

Это для примера.
И вообще не вижу принципаиально кода который мог бы воздействовать таким образом.
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2009, 12:47
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Тебе здесь скрипт вообше не нужен... Проблема в вёрстке....
Ответить с цитированием
  #5 (permalink)  
Старый 23.09.2009, 15:30
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

Сообщение от B~Vladi Посмотреть сообщение
Тебе здесь скрипт вообше не нужен... Проблема в вёрстке....
Сломал об это утверждение весь мозг. Верстка может казаться кривой, но вроде в ней нет утверждений, которые бы должны были растягивать шкалы в leveltd на всю td. А в CSS вообще о .leveltd я не упоминал.
Ответить с цитированием
  #6 (permalink)  
Старый 23.09.2009, 15:53
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от alexKniaz
Сломал об это утверждение весь мозг.
Сори, чувак, я не хотел

Не совсем понимаю это предложение:
Сообщение от alexKniaz
Т.к. в IE никакое нормальное назначение событий не пахало, то он добавляет в элемент div который в onmousemove подсовывает className родителя.
Он сам(!) добавляет чтоли?! И откуда взялся div?!
Ответить с цитированием
  #7 (permalink)  
Старый 23.09.2009, 15:54
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

Скрипт добавляет этот div этим кодом :
if(obj.innerHTML!=''){
   obj.innerHTML='<div onmousemove=\"showHint(true,repl(this.parentNode.className),event);\" onmouseout=\"showHint(false);\">'+text+'<\/div>';
   }
Ответить с цитированием
  #8 (permalink)  
Старый 23.09.2009, 15:59
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от alexKniaz
Скрипт добавляет этот div этим кодом
Аха, понятно... Попробуй вместо this.parentNode.className вставлять именно его:
\''+this.parentNode.className+'\'
И ещё перепиши так, чтобы div создавался и добавлялся DOM-методами. Это касается и добавления обработчиков событий...
Ответить с цитированием
  #9 (permalink)  
Старый 23.09.2009, 16:16
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

DOM методы не работали в IE 8. Из-за того и пришлось так делать. А вот \''+this.parentNode.className+'\' можно проверить
Ответить с цитированием
  #10 (permalink)  
Старый 23.09.2009, 16:26
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от alexKniaz
DOM методы не работали в IE 8
Всё там работает. Какие конкретно были проблемы?!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный синтаксис walash Общие вопросы Javascript 4 18.08.2009 11:55
Непонятный глюк в IE6 Vitaly jQuery 1 26.07.2009 02:42
Возникает глюк при использовании двух плагинов dummer jQuery 5 23.12.2008 20:26
Очередной глюк SunYang Общие вопросы Javascript 10 04.09.2008 17:26
глюк с getElementById Antonio Events/DOM/Window 2 28.05.2008 14:25