【问题标题】:How to get a random number each time the code is executed for replace?每次执行代码替换时如何获取随机数?
【发布时间】:2018-02-01 00:56:08
【问题描述】:

我正在编写一个 JavaScript 函数,它查看网页并用我创建的数组中的随机字符串替换价格的每个实例。每次我在网页上运行我的脚本时,都会从数组中选择一个不同的字符串,但它会为 replace 方法的每个实例选择相同的字符串。如何让每个替换选择一个随机数?实际上我曾经有过这个工作,但我不得不更改我的代码,现在它重复了相同的字符串。

这是我的代码:

$("*").each( function() { //go through each paragraph
    var curr = $(this).html();

    var price = Math.floor(Math.random() * pricesArray.length);
    curr = curr.replace(/(\$[0-9]+\.[0-9]{2})+/g, pricesArray[price]);
    console.log(curr);
    $(this).html(curr); //update paragraph text
});

【问题讨论】:

  • 您上面的脚本将为每个元素运行独立的随机化。如果您得到重复,则可能选择了相同的随机索引。此外,$("*") 选择器将针对页面上的每个元素。您可能需要一个不太具体的选择器。
  • @PaulRoub 我完全同意你的看法 - 我对 cs 很陌生,希望能够在任何网页上搜索所有“$”实例,以便我可以替换价格 - 我选择了 *因为我找不到更好的方法,而且不同的网站在不同类型的标签中都有自己的价格。

标签: javascript jquery html random


【解决方案1】:

$('*') 将匹配 <html><body> 等。第一个匹配 (<html>) 将对页面中的所有价格执行替换,因为它们都包含在其中。假设随机字符串不是一个价格,就是这样,没有什么可以替换的。

您可以通过为每个匹配调用一个替换函数来代替,而不是为每个节点选择一个新字符串:

var pricesArray = ['thing one', 'thing two', 'thing three', 'thing four'];

var text = document.body.innerHTML;

text = text.replace(/(\$[0-9]+\.[0-9]{2})+/g,
  function() {
    var repno = Math.floor(Math.random() * pricesArray.length);
    return pricesArray[repno];
  }
);

document.body.innerHTML = text;
<p>$5.99</p>
<p><b>$7.97</b></p>
<p>A price ($14.92) within some text, followed by another price ($17.76).</p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2010-11-16
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多