2016-04-07 3 views
0

Когда я нажимаю ссылку «Случайный» на моем навигаторе (бутстрап), это относится к Javascript-коду (ниже), который приводит меня к случайной странице на моем макетном веб-сайте.Случайная ссылка javascript, чтобы игнорировать текущую страницу

Однако я хотел бы добавить функцию, поэтому, если я нахожусь, скажем Link[2]=fed-rates.html, когда я нажимаю ссылку «Случайный» на моем навигаторе, она всегда отводит меня от страницы, на которой я сейчас (, он игнорирует Link [2]).

Мне интересно, возможно ли это, было бы здорово получить некоторые идеи.

Javascript код:

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 

Новый код, который приходит с "/ неопределенном" страницы:

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] 

ответ

1

Вы можете сделать следующее:

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

Это просматривает все ссылки и проверки, если они существуют в текущем URL-адресе. Если они это сделают, он удаляет их из списка с помощью функции сращивания.

Добавить этот код после установки ссылки [2], так как это значит, что он должен удалить текущую страницу.


Редактировать: Я также заметил, что ваша случайная функция распределена неравномерно. Не то чтобы это так важно, но это может вызвать проблемы для вас. Причиной этого является то, что число от 0 до 2 больше, чем число от 0 до двух. Чтобы получить нуль из шкалы случайных чисел, значение Math.random() должно быть меньше 0,5. Аналогично, он должен быть больше или равен 1,5, чтобы получить 2. у вас есть вероятность 0,5/2 или 1/4 для 0 и 2. Это оставляет вероятность 1/2 для получения, что имеет смысл, поскольку все числа от 0,5 до 1,5 даст вам 1.

tl; dr: Используйте math.floor(Math.random() * (maximum + 1)), а не Math.round(Math.random() * maximum) для генерации случайных чисел.


Кроме того, если вы хотите менее повторяющийся способ сделать это, вы могли бы заменить обе функции на что-то вроде этого:

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 
} 

Вы могли бы назвать это как randomLink("first_page.html", "second_page.html") с произвольным количеством страниц.

+0

Это замечательно, это предотвращает восхождение на ту же страницу, когда я нажимаю ссылку. Однако иногда я получаю страницу с ошибкой, а URL-адрес «/ undefined». Возможно, это из-за того, где я разместил код? (см. Нижний поле кода в моем вопросе) – Prodigy

+0

После этого вы должны сгенерировать случайное число, используя описанную мной функцию. Если вы удаляете ссылку, длина массива ссылок не будет всегда равна 3. Например, ["link a", "link b", "link c"] может измениться на ["link b "," ссылка c "]. Поэтому генератор случайных чисел должен генерировать число между 0 и links.length - 1. Однако простое изменение Math.random() * 2 на Math.random() не решит проблему, поскольку вы не можете быть уверены в длина массива. Вместо этого вы должны использовать 'Math.floor (Math.random() * links.length)' для myrandom и установить его * после * оператора ForEach – Taconut

Смежные вопросы