【问题标题】:Random link javascript to ignore current page随机链接javascript忽略当前页面
【发布时间】:2016-04-07 20:20:45
【问题描述】:

当我单击导航栏(引导程序)上的“随机”链接时,它指的是 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

带有“/undefined”页面的新代码:

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]

【问题讨论】:

    标签: javascript jquery twitter-bootstrap navigation navbar


    【解决方案1】:

    您可以执行以下操作:

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

    这会查看所有链接并检查它们是否存在于当前 URL 中。如果有,它会使用 splice 函数将它们从列表中删除。

    在设置链接 [2] 后添加此代码,因为此时它应该删除当前页面。


    编辑:我还注意到您的随机函数分布不均。并不是说它有那么重要,但它可能会给你带来问题。其原因是 0 和 2 之间的数字舍入到 1 比舍入到 0 或 2 的数字要多得多。为了从您的随机数刻度中获得零,Math.random() 必须小于 0.5。同样,它必须大于或等于 1.5 才能得到 2。0 和 2 的概率为 0.5/2 或 1/4。这使得得到 1 的概率为 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") 并使用任意数量的页面。

    【讨论】:

    • 这很棒,当我单击链接时,它可以防止显示相同的页面。但是我偶尔会收到一个错误页面,并且 URL 是“/未定义”。也许这是因为我放置代码的位置? (请参阅我的问题中的底部代码框)
    • 之后你必须使用我描述的函数生成随机数。如果要删除链接,则链接数组的长度并不总是为 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 语句
    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多