За последние 24 часа нас посетил 30471 программист и 1791 робот. Сейчас ищут 1240 программистов ...

Упрощение ява-кода

Тема в разделе "JavaScript и AJAX", создана пользователем kit, 3 июн 2013.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Всем привет!
    На моей странице есть форма, в ней таблица в которой находятся элементы формы и подписи к ним, весь код выкладывать смысла нет из-за его однотипности, но вот пример:
    Код (Text):
    1.  
    2. <script>
    3. function showTooltip()
    4.  {
    5.  var myDiv1 = document.getElementById('tooltip1');
    6.  var myDiv_1 = document.getElementById('tooltip_1');
    7.  
    8.  var myDiv2 = document.getElementById('tooltip2');
    9.  var myDiv_2 = document.getElementById('tooltip_2');
    10. ...
    11.  var myDiv10 = document.getElementById('tooltip10');
    12.  var myDiv_10 = document.getElementById('tooltip_10');
    13.  
    14. if(myDiv1.style.display == 'none')
    15.  {
    16.  myDiv1.style.display = 'block';
    17.  } else {
    18.  myDiv1.style.display = 'none';
    19.  }
    20.  if(myDiv_1.style.display == 'block')
    21.  {
    22.  myDiv_1.style.display = 'none';
    23.  } else {
    24.  myDiv_1.style.display = 'block';
    25.  }
    26. if(myDiv2.style.display == 'none')
    27.  {
    28.  myDiv2.style.display = 'block';
    29.  } else {
    30.  myDiv2.style.display = 'none';
    31.  }
    32.  if(myDiv_2.style.display == 'block')
    33.  {
    34.  myDiv_2.style.display = 'none';
    35.  } else {
    36.  myDiv_2.style.display = 'block';
    37.  }
    38. ...
    39. if(myDiv10.style.display == 'none')
    40.  {
    41.  myDiv10.style.display = 'block';
    42.  } else {
    43.  myDiv10.style.display = 'none';
    44.  }
    45.  if(myDiv_10.style.display == 'block')
    46.  {
    47.  myDiv_10.style.display = 'none';
    48.  } else {
    49.  myDiv_10.style.display = 'block';
    50.  }
    51. return false;
    52.  }
    53.  </script>
    54. <TABLE>
    55. ...
    56. <TR>
    57.  
    58.     <TD>
    59.     <div id="tooltip1" style='display: block'>Надпись 1</div>
    60.     <div id="tooltip_1" style='display: none'>Надпись 2</div>
    61.     </TD>
    62.     <TD>
    63.         <input type='text' name='m1'>
    64.     </TD>
    65. </TR>
    66. ...
    67. </TABLE>
    68. <div id="tooltip1" style='display: block'>
    69. <a href='javascript:;' onclick=showTooltip()>Ссылка 1</a>
    70. </div>
    71. div id="tooltip_1" style='display: block'>
    72. <a href='javascript:;' onclick=showTooltip()>Ссылка 2</a>
    73. </div>
    Вроде все необходимое указал.
    Смысл работы кода заключается в следующем. На странице отображается форма для ввода данных с подписями к полям. Ниже формы отображается ссылка 1. При нажатии на нее надписи к элементам формы меняются, а ссылка 1 превращается в ссылку 2.
    Все работает замечательно за исключением скорости загрузки страницы. Я в яве не шарю. Код срисовал с интернета и как смог применил к своей задаче.
    Вопрос: можно ли оптимизировать этот код? т.е. сделать не таким громоздким?
    Скажу сразу, что сделать только два блока (изначально видимый и изначально невидимый) не получится, т.к. все элементы находятся в таблице. Так же прошу не предлагать зациклить код на PHP (это я уже сделал). Можно ли оптимизировать код именно средствами ява?
    Всем спасибо за дельные варианты решения задачи!
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Зациклить в js.
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    проверять некогда, но чтото типа такого можно сделать. а если юзать жквери то вообще пару строк
    Код (Text):
    1. function showTooltip() {
    2.  for(var i=1; i<=10; i++) {
    3.     myDiv1 = document.getElementById('tooltip'+i);
    4.     myDiv2 = document.getElementById('tooltip_'+i);
    5.     myDiv1.style.display = (myDiv1.style.display == 'none') ? 'block' : 'none';
    6.     myDiv2.style.display = (myDiv2.style.display == 'none') ? 'block' : 'none';
    7.  }
    8.  return false;
    9. }
     
  4. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Но ведь это по сути тоже самое.
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    это один из вариантов, дегромоздкомизации )
    да. а должно было что совсем другое получится, типа алгоритма сортировки "пузырьком" )
     
  6. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Я зациклил код с помощью php, но браузеры все равно "видят" код в таком виде как я описал выше. Другими словами циклы скорости работы не добавляют, а это основная задача.
    Я думал что может быть возможен вариант в котором будет прописано всего два div (один изначально видимый, а второй изначально невидимый), а потом с помощью id="tooltip1" и id="tooltip_1" прописывать любые div-блоки в тексте, которые будут подменять надписи к элементам формы. Но реализовать у меня это не получилось, т.к. в яве мне тяжко.

    Добавлено спустя 22 минуты 12 секунд:
    что-то типа этого:
    Код (Text):
    1. <script>
    2. function showTooltip()
    3.  {
    4.     var myDiv = document.getElementById('tooltip');
    5.     var myDiv_ = document.getElementById('tooltip_');
    6.  
    7.     if(myDiv.style.display == 'none')
    8.     {
    9.         myDiv.style.display = 'block';
    10.     }
    11.     else
    12.     {
    13.         myDiv.style.display = 'none';
    14.     }
    15.  
    16.     if(myDiv_.style.display == 'block')
    17.     {
    18.         myDiv_.style.display = 'none';
    19.     }
    20.     else
    21.     {
    22.         myDiv_.style.display = 'block';
    23.     }
    24.     return false;
    25.  }
    26. </script>
    27. <div id="tooltip" style='display: block'>видимая запись 1</div>
    28. <div id="tooltip_" style='display: none'>скрытая запись 1</div>
    29.  
    30. <div id="tooltip" style='display: block'>видимая запись 2</div>
    31. <div id="tooltip_" style='display: none'>скрытая запись 2</div>
    32.  
    33. <div id="tooltip" style='display: block'><a href='javascript:;' onclick=showTooltip()>видимая ссылка</a></div>
    34. <div id="tooltip_" style='display: none'><a href='javascript:;' onclick=showTooltip()>скрытая ссылка</a></div>
    но меняется только первая запись :(