【问题标题】:jQuery random blockquotejQuery 随机块引用
【发布时间】:2013-05-15 10:57:24
【问题描述】:

在过去的 2 个小时里,我一直在寻找和测试这个问题的各种解决方案,但收效甚微,所以我只好寻求帮助。

我想构建一个引用数组,每个引用都有引用和链接,可以随机提取。我只需要让它们在页面刷新时更改。

但是,我有一些非常漂亮的 CSS 来设置块引用的样式和引用。

下面是一些 HTML 示例,用于说明数组中的内容如何适合引号:

<blockquote>
  <p>A line of oversize watches that can offer many of the attributes of premium luxury watches at an affordable price.
  </p>
  <cite>&mdash; 
    <a href="http://www.horozima.com/2012/07/terranaut-xl-50mm.html" target="_blank">Horozima
    </a>
  </cite>
</blockquote>

此代码的预期位置是 Big Cartel 产品(模板)页面,其中包含为每个产品自动生成的内容。因此,如果没有一些随机化的 JS,每个产品页面上都会有相同的引用。

【问题讨论】:

  • 你到底在问什么? CSS与此有什么关系?您的代码在哪里显示您尝试过的内容(而不是输出需要的样子)?
  • 下面有两个很好的答案,稍后我会返回我的选择和任何进一步的 cmets。我选择不包含我的试用 JS,因为我认为收集(更好的)想法比纠正可能不是最好的解决方案更好。

标签: jquery arrays random quotations bigcartel


【解决方案1】:

在 DOMReady 上执行 JavaScript 以使用 random() 函数生成随机数。如果将此数字乘以一个值,您将得到一个介于 0 和该值之间的随机数(但不包括该值本身)。如果将引号放入 JSON 数组,则可以使用数组的 .length 属性作为乘以的值,因为数组中的项目数比最后一项的索引大一。这将生成一个随机数,它是数组的索引之一。

之后,使用jQuery的text()函数替换段落的文本和引用标签来显示你随机选择的引用。

这是一个例子: http://jsfiddle.net/sWvGp/

HTML:

<blockquote id="randomquote">
    <p></p> <cite>&mdash; <a href="#" target="_blank"></a></cite>
</blockquote>

Javascript:

var myQuotes = [{
    quote: "To err is human; to forgive, divine.",
    cite: "Alexander Pope",
    url: "http://www.example.com"
}, {
    quote: "Reports of my death have been greatly exaggerated.",
    cite: "Mark Twain",
    url: "http://www.example.com"
}, {
    quote: "A line of oversize watches that can offer many of the attributes of premium luxury watches at an affordable price.",
    cite: "Horozima",
    url: "http://www.horozima.com/2012/07/terranaut-xl-50mm.html"
}];

var randomQuote = Math.floor(Math.random() * myQuotes.length)

$('p', '#randomquote').text(myQuotes[randomQuote].quote);
$('cite a', '#randomquote').attr('href', myQuotes[randomQuote].url).text(myQuotes[randomQuote].cite);

【讨论】:

  • 感谢您的建议,一旦我尝试了这个,我会回来的。我喜欢你整理引文的方式。
  • 两个示例都获得了预期的结果,但我喜欢您设置数组的方式。可悲的是,由于与 Big Cartel 商店所需的这两个 JS 源发生冲突,我认为两者都不能使用:cache1.bigcartel.com/themes/sexy/javascripts/prototype.jsdl.dropboxusercontent.com/u/52548810/Themes/3925/script.js
  • 您可以使用jQuery.noConflict() 避免与其他库发生冲突。您可以将$() 命令别名为$jQ()。希望这能解决您的问题。
  • 我刚刚测试了我广泛但离线的试用版,它正在工作。明天我更新大卡特尔网站后会反馈。谢谢 Corion!
  • 只是让您知道,一旦上传到 Big Cartel 服务器,一切都运行良好。非常感谢 Corion。
【解决方案2】:

根据您的优势,您可以“快速而肮脏”或作为适当的解决方案。

正确的解决方案是让服务器端一些代码从数据库中提取随机行,并按上述方式呈现。由于你的标签与它无关,我会跳到

快速而肮脏的解决方案,即有一个 javascript 引号和链接数组,并显示一个随机的:

$(document).ready(function() {
  var questions = [
      {q: 'This is question 1', l: 'http://this.is.link1', a: 'Test' },
      {q: 'This is question 2', l: 'http://this.is.link2' , a:'Another'}
  ];

  var i = Math.floor((Math.random()*questions.length));

  $('blockquote p').html(questions[i].q);
  $('blockquote a').attr('href', questions[i].l);
  $('blockquote a').html(questions[i].a);
});

您可以在jsFiddle 中看到。它假设只存在一个块引用,但它可以很容易地扩展。你可以在你的 HTML 中输出一个单引号,让它在 JS 被禁用时看起来没问题。

【讨论】:

  • 呸。你把我打败了。 :0)
  • 我认为.attr('src'应该是.attr('href'
  • @Corion: 是的,恐怕也用于使用这种类型的图像代码。已编辑。
  • 刚刚注意到另一个:questions.length 已经比引号的数量大 1,因此添加 +1 有时会使您超出范围。
  • 感谢您的建议,等我试过了再回来。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2015-04-26
  • 2021-06-19
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多