この種の動的動作にはクライアント側 ( javascript ) またはサーバー側 ( ruby 、phpなど) のソリューションが必要であることを念頭に置いて、目的を達成する最も簡単な方法は、次のアプローチです。
var linksList = [
'http://google.com/',
'http://stackoverflow.com/',
'http://slashdot.org/'
],
el = document.getElementById('demo'),
randomNumber = Math.floor(Math.random() * linksList.length);
el.href = linksList[randomNumber];
el.textContent = linksList[randomNumber];
JS フィドルのデモ。
もう少し複雑なのは次のとおりです (これは同じことを行いますが、オブジェクトの配列を使用して、各リンクにより構成可能なオプションを提供します)。
var linksList = [{
'url': 'http://google.com/',
'text': 'Google.com'
}, {
'url': 'http://stackoverflow.com/',
'text': 'Programming Q&A'
}, {
'url': 'http://slashdot.org/',
'text': 'Slashdot: News for Nerds'
}],
el = document.getElementById('demo'),
randomNumber = Math.floor(Math.random() * linksList.length);
el.href = linksList[randomNumber].url;
el.textContent = linksList[randomNumber].text;
JS フィドルのデモ。
そして、もう少し複雑な (この時点ではより保守しやすくなりますが) アプローチは、複数の項目で呼び出すことができる関数の使用を開始することです。
function randomiseLinks(el, list) {
if (!el || !list) {
return false;
} else {
var randomNumber = Math.floor(Math.random() * list.length);
el.href = list[randomNumber].url;
el.textContent = list[randomNumber].text;
}
}
var linksList = [{
'url': 'http://google.com/',
'text': 'Google.com'
}, {
'url': 'http://stackoverflow.com/',
'text': 'Programming Q&A'
}, {
'url': 'http://slashdot.org/',
'text': 'Slashdot: News for Nerds'
}],
links = document.getElementsByTagName('a');
for (var i = 0, len = links.length; i < len; i++) {
randomiseLinks(links[i], linksList);
}
JS フィドルのデモ。
次のアプローチには、上記の機能的アプローチの利点がありますが、プロトタイプを拡張するため、 or (とりわけ)Object
によって返される要素または nodeList で直接呼び出すことができることを意味します。document.getElementById()
document.getElementsByTagName()
Object.prototype.randomiseLinks = function (list) {
var test = this.length,
that = test ? [] : [this],
randomNumber;
if (test){
for (var i = 0, len = this.length; i < len; i++){
that[i] = this[i];
}
}
for (var i = 0, len = that.length; i < len; i++){
randomNumber = Math.floor(Math.random() * list.length);
that[i].href = list[randomNumber].url;
that[i].textContent = list[randomNumber].text;
}
return this;
};
var linksList = [{
'url': 'http://google.com/',
'text': 'Google.com'
}, {
'url': 'http://stackoverflow.com/',
'text': 'Programming Q&A'
}, {
'url': 'http://slashdot.org/',
'text': 'Slashdot: News for Nerds'
}];
次のように呼び出すことができます。
document.getElementById('test').randomiseLinks(linksList);
または:
document.getElementsByTagName('a').randomiseLinks(linksList);