2015-09-16 4 views
0

Я всегда нахожу, что я копирую и вставляю одну и ту же функцию снова и снова. У меня много проблем с пониманием того, как писать более гибкий код.Борьба с рационализацией javascript

$(document).on('mouseenter mouseleave','#claps10',function() { 
    "use strict"; 
    if ($(window).width() > 800) { 
     $('.inco10').stop().animate({width: 'toggle', height: '125px'}); 
    } 
}); 

$(document).on('mouseenter mouseleave','#claps11',function() { 
    "use strict"; 
    if ($(window).width() > 800) { 
     $('.inco11').stop().animate({width: 'toggle', height: '125px'}); 
    } 
}); 

У меня есть 11 из тех, когда я знаю, что есть лучший способ иметь только один. Я просто недостаточно квалифицирован для этого. Как вы это называете, и можете ли вы показать мне пример того, как это можно сделать?

+1

Определить то, что переменная (селектор (s)) и создать функцию, которая содержит логику и принимает переменные значения в качестве аргументов. Могут быть другие способы, зависящие от отношения элементов DOM в документе или регулярности ваших идентификаторов/имен классов, но это общий подход. –

ответ

2

Получить все элементы, имеющие идентификатор, начиная с claps используя [id^=claps] селектор, а затем получить идентификатор целевого элемента с помощью $(this) (claps11, например) удалить claps из идентификатора с помощью $(this).attr("id").replace("claps", ""), чтобы получить число (11), а затем сцепить его с класс.

$(document).on('mouseenter mouseleave','[id^=claps]',function() { 
     "use strict"; 

     var idNumber = $(this).attr("id").replace("claps", ""); 
     if ($(window).width() > 800) { 
      $('.inco'+idNumber).stop().animate({width: 'toggle', height: '125px'}); 
     } 
    }); 
+0

Удивительно, что это работает! Спасибо! Как вы знаете, как это сделать. Что я могу найти, чтобы понять, как всегда писать код таким образом? – riotgear

+0

Всегда думайте о написании общего решения. Вам не нужно копировать биты кода здесь и там. Всегда есть способ объединить логику в одном месте, но для этого требуется немного дополнительного знания с помощью технологии, которую вы используете, а также опыта. StackOverflow - отличное место для повышения ваших знаний и изучения хороших кодовых практик со стороны сверстников. Просто продолжайте обновляться. – KAD

+0

@riotgear: Это очень похоже на то, что я написал в своем комментарии в вашем вопросе. Определите детали, которые являются фиксированными, и те, которые являются переменными. Например. все идентификаторы элементов начинаются с «claps», только число отличается. Итак, первый вопрос: можно ли выбрать все элементы, чей идентификатор начинается с «claps»? (да) Затем, учитывая элемент DOM ('this'), можно ли извлечь из него переменную часть из идентификатора (числа)? (да) Какова фиксированная часть второго селектора? ('. .inco'') Можно ли построить селектор из фиксированной части + выбранного номера? (да) и т. д. –

2

Другой способ добиться этого:

Используйте имя класса для MouseEnter и MouseLeave

$(document).on('mouseenter mouseleave','.claps',function() { 
"use strict"; 
    logicFunction(this.id.replace("claps", "inco"); 
}); 
function logicFunction(className) 
{ 

    if ($(window).width() > 800) { 
     $('.'+className).stop().animate({width: 'toggle', height: '125px'}); 
    } 
}