此函数从文本文件quotes.txt中选择一个随机引用(每个引号由@分隔)并在引号div中显示它,例如在每个页面加载时显示<div class="quotes">quote shown here</div>
。
但为什么它有时会跳过引用而在<div>
中没有显示任何内容?
$.get('quotes.txt', function(data) {
var quotes = data.split("\@");
var idx = Math.floor(quotes.length * Math.random());
$('.quotes').html(quotes[idx]);
});
随机生成器是否存在问题(从我的阅读中看起来不是很随机)?有没有办法让它只能从一定数量的引号中随机选择,即50?有没有更好的方法 - 也许是php - 生成1到50之间的随机数?
quotes.txt看起来像这样:
Lorem ipsum dolor sit amet, consectetur adipiscing elit@
Fusce tincidunt, ante ut scelerisque@
Mauris lacinia, magna sed auctor pellentesque, diam nisl rutrum ligula@
Etiam tempor elementum augue, vitae cursus eros laoreet@
Donec imperdiet ullamcorper pharetra@
编辑4/27/11 我最后使用了一个不会显示空白行的问题。 quotes.html以这种方式构建:
<div class="quote">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div>
<div class="quote">Lorem ipsum dolor sit amet, consectetur.</div>
功能:
$('div#quotescontainer').load('quotes.html',function(){
var $quotes = $(this).find('div.quote');
var n = $quotes.length;
var random = Math.floor( Math.random()*n );
$quotes.hide().eq(random).fadeIn();
});
答案 0 :(得分:8)
在@
上拆分文件后,quotes
中的 last 项可能是一个空字符串,因为您之前有一个@
文件末尾的换行符。
对于随机数发生器的感知“随机性”,这里可能没有问题。众所周知,人类在检测序列是否随机时是不好的。
答案 1 :(得分:1)
我认为你应该删除quotes.txt末尾的at符号(@),因为它会在quotes数组变量中创建一个空字符串。
答案 2 :(得分:1)
我最终使用了一个不显示空白行的问题。 quotes.html以这种方式构建:
<div class="quote">Lorem ipsum dolor sit amet, consectetur adipiscing elit</div>
<div class="quote">Lorem ipsum dolor sit amet, consectetur.</div>
功能:
$('div#quotescontainer').load('quotes.html',function(){
var $quotes = $(this).find('div.quote');
var n = $quotes.length;
var random = Math.floor( Math.random()*n );
$quotes.hide().eq(random).fadeIn();
});
答案 3 :(得分:0)
这不是一个jQuery函数,而是一个通用的JavaScript函数。至少创建随机数的代码。你是正确的,虽然它不是很随机。我遇到了这个问题,并找到了帮助我的blog post帮助。
答案 4 :(得分:0)
我认为你可能会得到空白的原因是你的数组有一个尾随空格。如果文件以@结尾,并且您在@上拆分,则最后一项将是一个空白字符串。
答案 5 :(得分:0)
您可以从数组中删除空项目
var quotes = data.split("\@").filter(function(itm){return !!itm});