RadCor
@RadCor
Если мой ответ вам помог, отмечайте его решением.

Как сократить такую jquery запись?

Есть такой код:
$('#wpu1').hover(function(){$('#epu1').toggle();});
 $('#wpu2').hover(function(){$('#epu2').toggle();});
 $('#wpu3').hover(function(){$('#epu3').toggle();});
 $('#wpu4').hover(function(){$('#epu4').toggle();});
 $('#wpu5').hover(function(){$('#epu5').toggle();});

Подскажите пожалуйста как его сократить, думаю по любому есть вариант, что бы не создавать для каждого функцию или ещё что-то. Язык только учу, по этому обращаюсь за подсказкой к вам.
  • Вопрос задан
  • 238 просмотров
Решения вопроса 4
dmitriy_novikov
@dmitriy_novikov
Занимаюсь web-разработкой с 2010г. http://dmnv.ru
for (var i = 1; i < 6; i++) {
$('#wpu'+i).hover(function(){$('#epu'+i).toggle();});
}
Ответ написан
Ronnie_Gardocki
@Ronnie_Gardocki
Я у мамы фронтендщик.
Какие-то извращения люди предлагают, страшно жить в таком мире.
Есть 2 варианта:
1) CSS :hover - этот самый адекватный.
2) Если вы извращаетесь и вам надо именно на js, то убираете нафиг все убогие id у элементов, пишите нормальные классы, и к элементам, при наведении на которое должна срабатывать анимация, добавляете атрибуты data-id="*" где * это номер элемента (любым циклом можно такой html вывести).
Финальный код будет выглядеть так:
$(document).on("click", ".wpu", function() {
  var id = $(this).data("id");
  $(".epu-"+id).toggle();
});
Ответ написан
heksen
@heksen
// можно так

function myhover( id1, id2 )
{
 $(id1).hover(function(){$(id2).toggle();});
}

myhover( "wpu1", "epu1" );
myhover( "wpu2", "epu2" );
myhover( "wpu3", "epu3" );
myhover( "wpu4", "epu4" );


Можно ещё с массивом поэкспериментить.
Ответ написан
Комментировать
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
//Бредово
for (var i = 1; i < 6; i++) {
  $('#wpu'+i).hover(function(){
        var id = this.id.split("wpu")[1];
        $('#epu'+id).toggle();
  });
}


или

for (var i = 1; i < 6; i++) {
  (function(id){
    $('#wpu'+id).hover(function(){
       $('#epu'+id).toggle();
    });
  })(i);
}


или

//Не кроссбраузерно
for (var i = 1; i < 6; i++) {
    $('#wpu'+id).hover((function(){
       this.toggle();
    }).bind( $('#epu'+i) ));
}


или

function hoverPU(id){
   $("#wpu"+id).hover(function(){
      $("#epu"+id).toggle();
   });
}

for(var i = 1; i < 6; i++) hoverPU(i);


или

//Психически ненормально
function hoverPU(i, p){
   $("#wpu"+i).hover(function(){
       $("#epu"+i).toggle();
   });
   i < p && hoverPU(++i, p);
}

hoverPU(1, 5);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
badsanta2008
@badsanta2008
Software engineer (Vue.js/Wordpress)
Я бы вообще предложил бы сделать это на цсс3. С помощью свойства translate. Если интересует, то пишите, помогу)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы