2016-04-07 2 views
0

Wenn ich auf den 'Random' Link auf meiner Navbar (Bootstrap) klicke, verweist er auf Javascript-Code (unten) und bringt mich auf eine zufällige Seite meiner Mock-Website.Zufälliger Link Javascript, um aktuelle Seite zu ignorieren

Allerdings möchte ich ein Feature hinzufügen, also wenn ich bin, sagen Link[2]=fed-rates.html, wenn ich den 'Random' Link auf meiner Navbar drücke es immer weg von der Seite, auf der ich gerade bin (das ist , ignoriert Link [2]).

Ich frage mich, ob das möglich ist, wäre toll, ein paar Ideen zu bekommen.

Javascript-Code:

function randomlinks(){ 
    var myrandom=Math.round(Math.random()*2) 
    var links=new Array() 
    links[0]="articles/how-to-trade-oil.html" 
    links[1]="articles/usd-yen-gbp.html" 
    links[2]="articles/fed-rates.html" 

    window.location=links[myrandom] 
} 

// above is for all web pages 

function randomlinksarticle(){ 
    var myrandom=Math.round(Math.random()*2) 
    var links=new Array() 
    links[0]="how-to-trade-oil.html" 
    links[1]="usd-yen-gbp.html" 
    links[2]="fed-rates.html" 

    window.location=links[myrandom] 
} 

// above is so navbar link still works on the linked pages, with the way I have the folder directory setup 

Neuer Code, der mit "/ undefined" Seite kommt:

function randomlinksarticle(){ 
var myrandom=Math.round(Math.random()*2) 
var links=new Array() 
links[0]="how-to-trade-oil.html" 
links[1]="usd-yen-gbp.html" 
links[2]="fed-rates.html" 

links.forEach(function(link, index) { 
if (location.href.indexOf(link) !== -1) { 
    links.splice(index, 1); 
}}); 
window.location=links[myrandom] 

Antwort

1

Sie können folgendes tun:

links.forEach(function(link, index) { 
    if (location.href.indexOf(link) !== -1) { 
     links.splice(index, 1); 
    } 
}); 

Das durch sieht alles die Links und prüft, ob sie in der aktuellen URL vorhanden sind. Wenn dies der Fall ist, werden sie mithilfe der Spleißfunktion aus der Liste entfernt.

Fügen Sie diesen Code nach dem Setzen des Links [2] hinzu, da dann die aktuelle Seite entfernt werden sollte.


Edit: Ich habe auch festgestellt, dass Ihre zufällige Funktion nicht gleichmäßig verteilt ist. Nicht, dass es so wichtig ist, aber es könnte Probleme für dich verursachen. Der Grund dafür ist, dass es viel mehr Zahlen zwischen 0 und 2 gibt, die auf 1 als auf 0 oder 2 runden. Um eine Null von Ihrer Zufallszahlenskala zu erhalten, muss Math.random() kleiner als 0,5 sein. Ebenso muss es größer als oder gleich 1,5 sein, um eine 2 zu bekommen. Sie haben eine 0,5/2 oder 1/4-Wahrscheinlichkeit für 0 und 2. Dies lässt eine 1/2-Wahrscheinlichkeit, um eins zu erhalten, was seit allen Zahlen sinnvoll ist zwischen 0,5 und 1,5 würde Ihnen eine geben 1.

tl; dr: Verwenden Sie math.floor(Math.random() * (maximum + 1)) statt Math.round(Math.random() * maximum) für die Generierung von Zufallszahlen.


Auch, wenn Sie eine weniger wiederholende Art und Weise dies tun wollen, könnten Sie beide Funktionen für so etwas wie diese ersetzen:

function randomLink() { 
    var links = Array.prototype.slice.call(arguments, 0); //Turns the function's arguments into an array 
    links.forEach(function(link, index) { //Loops through all the links 
     if (location.href.indexOf(link) !== -1) { //If the link text is contained in the url 
      links.splice(index, 1); //Remove the link from the links array 
     } 
    }); 
    var rand = Math.floor(Math.random() * links.length); //Choose a number between 0 and links.length - 1 
    window.location = links[rand]; //Visit the link 
} 

Sie können diese wie randomLink("first_page.html", "second_page.html") mit einer beliebigen Anzahl von Seiten aufrufen.

+0

Das ist großartig, es verhindert die gleiche Seite, wenn ich auf den Link klicke. Ich bekomme jedoch gelegentlich eine Fehlerseite und die URL ist "/ undefined". Vielleicht liegt das daran, wo ich den Code platziert habe? (siehe unten Code-Box in meiner Frage) – Prodigy

+0

Sie müssen die Zufallszahl anschließend mit der Funktion, die ich beschrieben habe, generieren. Wenn Sie einen Link entfernen, wird die Länge des Link-Arrays nicht immer gleich 3. Zum Beispiel kann ["link a", "link b", "link c"] zu ["link b "," link c "]. Daher sollte der Zufallszahlengenerator eine Zahl zwischen 0 und links.length - 1 erzeugen. Das einfache Ändern von Math.random() * 2 in Math.random() löst das Problem jedoch nicht, da Sie sich dessen nicht sicher sein können die Länge des Arrays. Stattdessen sollten Sie 'Math.floor (Math.random() * links.length)' für myrandom verwenden und * nach * der ForEach-Anweisung festlegen – Taconut

Verwandte Themen