2016-07-20 7 views
0

Ich habe ein Skript, das ähnliche Dinge für verschiedene IDs tut und ich bin ziemlich sicher, dass dies in 1 Skript statt 3 getan werden kann, sind alle Vorschläge willkommen.Wie werden diese 3 Skripte in 1 umgewandelt?

$("#size-btn-one").click(function() { 
    $('html,body').animate({ 
     scrollTop: $(".scroll-one").offset().top -100}, 2000); 
    }); 
}); 

$("#size-btn-two").click(function() { 
    $('html,body').animate({ 
     scrollTop: $(".scroll-two").offset().top -100}, 2000); 
    }); 
}); 

$("#size-btn-three").click(function() { 
    $('html,body').animate({ 
     scrollTop: $(".scroll-three").top -100}, 2000); 
    }); 
}); 

Antwort

1

den Selektor Kombinieren Sie durch Komma Trennung eine and wählen machen, wie Sie auch mit html, body tat. Und Sie können den Namen aus dem Element id auf verschiedene Arten extrahieren, z. B. mit einem einfachen Ersetzen.

$("#size-btn-one, #size-btn-two, #size-btn-three").click(function() { 
    // getting only the last part of the elements id 
    var id = $(this).attr("id").replace("size-btn-", ""); 

    $("html, body").animate({ 
     // append the 'id' to the selector class 
     scrollTop: $(".scroll-" + id).offset().top -100}, 2000); 
    }); 
}); 
1
$("#size-btn-one, #size-btn-two, #size-btn-three").click(function(){ 

    var id = $(this).attr("id"); 
    var number = id.substring(id.lastIndexOf("-")); 

    $('html,body').animate({ 
     scrollTop: $(".scroll-"+ number).offset().top -100}, 2000); 
    }); 
}); 
+0

Hallo, wenn Sie die ID # size-btn-one bemerken, # size-btn-two oder # size-btn-three muss animieren zu .scroll-one, .scroll-two oder .scroll-three – user3767554

+1

Ja ich Ich bekomme die Nummer von der ID und benutze sie in der animierten Funktion 'scrollTop: $ (". scroll - "+ number) .offset(). top -100}, 2000);' – KAD

0
$("#size-btn-one, #size-btn-two, #size-btn-three").on("click",function(){ 
    var idLastPart = $(this).attr('id'); 
    idLastPart = idLastPart.match(/one|two|three/)[0]; 
    $('.scroll-'+idLastPart).animate({ 
      //your animation 
    },300); 
}); 
+1

Dieser Ansatz ist ein bisschen schlecht zu pflegen . Wenn Sie neue Elemente hinzufügen, müssen Sie immer auch die Regex bearbeiten. Doppelarbeit für eine Sache, die auf andere Weise leicht gemacht werden kann. – eisbehr

+0

Und Sie haben auch einen Fehler, '.scroll-' ist eine Klasse, keine ID. – eisbehr

+1

Bitte bearbeiten Sie mit mehr Informationen. Code-only und "try this" Antworten werden abgeraten, da sie keine durchsuchbaren Inhalte enthalten und nicht erklären, warum jemand "das versuchen sollte". – abarisone

1

Als Alternative würde ich die btn und die scroll- mit data- Attribute paaren und id= für diese nicht verwenden.

<a href='#' data-link='1'>one</a> 
<a href='#' data-link='2'>one</a> 
<a href='#' data-link='xyz'>one</a> 

<div data-link='1'>content 1</div> 
<div data-link='2'>content 2</div> 
<div data-link='xyz'>content 3</div> 

Dies bedeutet auch, dass Sie semantische Definitionen verwenden können, anstatt nur Zahlen (obwohl Sie mit IDs sowie offc könnten).

Dann:

$("a[data-link]").click(function() { 
    var link = $(this).data("link"); 
    var div = $("div[data-link=" + link + "]"); 

    $('html,body').animate({ 
     scrollTop: div.offset().top - 100}, 2000); 
    }); 
}); 

Normalerweise würde man auch eine Klasse hinzufügen, aber aufhörte, das Konzept der Paarung zu zeigen, über Datenattribute.