1

我试图弄清楚如何制作一个锚标记,当页面从我拥有的列表中随机刷新时,该标记每次都会改变。

说我有这个清单

<a href="http://testpage.com/">This is the first one</a>
<a href="http://testpage.com/">This is the second one</a>
<a href="http://testpage.com/">This is the third one</a>

这是第一个 这是第二个 这是第三个

它就像 Adsense 拥有的链接单元广告,但我只是希望它做简单的随机而不做任何额外的工作,比如检查是否与主题相关或不像 adsense 那样。

请告诉我我能做什么。

谢谢

4

2 回答 2

2
<a href="http://testpage.com/">
<script type="text/javascript">
    // This script will replace itself with a random one of these phrases
    var phrases = [
        'This is the first one',
        'This is the second one',
        'This is the third one'
    ];

    var scripts = document.getElementsByTagName('script');
    var this_script = scripts[scripts.length - 1];
    this_script.parentNode.replaceChild(document.createTextNode(phrases[Math.floor(Math.random()*phrases.length)]), this_script);
</script>
</a>​

JSFiddle


分解

创建一个包含三个字符串的数组文字:

var phrases = [
    'This is the first one',
    'This is the second one',
    'This is the third one'
];

获取页面上所有脚本元素的NodeList(因为页面已经加载到这一点,所以之前和包括这个的所有脚本):

var scripts = document.getElementsByTagName('script');

将该列表中的最后一个脚本(即,此脚本元素)存储在this_script

var this_script = scripts[scripts.length - 1];

我将把下一行分成更小的部分。
Math.random给出一个介于(包括)和(不包括)之间的数字。将它乘以 3 会在(inclusive) 和(exclusive) 之间得到均匀分布,并且Math.floor会截断它。这给出了一个介于两者之间的随机整数。如果将元素添加到数组中,它将更新,因为它在计算中使用了phrases.length,而不是文字 3:010302

Math.floor(Math.random()*phrases.length)

document.createTextNode创建并返回一个实现 Text 接口的新节点,它的数据就是传入的值。在这种情况下,它是短语数组中的一个随机元素:

document.createTextNode(phrases[Math.floor(Math.random()*phrases.length)])

Node.parentNode是不言自明的,在这种情况下,脚本元素的父级将是HTMLAnchorElement(由<a>树中脚本上方的标记表示)。Node.replaceChild接受两个参数, anew_child和 an old_child。我们为 传递了新的文本节点new child,并为 传递了这个脚本old_child,这导致该脚本从 DOM 中删除并替换为文本节点:

this_script.parentNode.replaceChild(document.createTextNode(phrases[Math.floor(Math.random()*phrases.length)]), this_script);
于 2012-06-01T01:46:04.800 回答
1

你可以像这样使用php:

<?php $linkName = mt_rand(1,3);
 if ($linkName == 1) echo '<a href="http://testpage.com/">This is the first one</a>';
 if ($linkName == 2) echo '<a href="http://testpage.com/">This is the second one</a>';
 if ($linkName == 3) echo '<a href="http://testpage.com/">This is the third one</a>';
?>
于 2012-06-01T01:58:53.103 回答