Javascript 为div id生成随机字符串

Javascript 为div id生成随机字符串,javascript,Javascript,我想在我的网站上显示YouTube视频,但我需要能够为每个将由用户共享的视频添加唯一的id。所以我把这些放在一起,我遇到了一个小问题。我试图让JavaScript为divid添加一个随机字符串,但它不起作用,显示字符串: <script type='text/javascript' src='jwplayer.js'></script> <script type='text/javascript'> function randomString(length)

我想在我的网站上显示YouTube视频,但我需要能够为每个将由用户共享的视频添加唯一的
id
。所以我把这些放在一起,我遇到了一个小问题。我试图让JavaScript为div
id
添加一个随机字符串,但它不起作用,显示字符串:

<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');

    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }

    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var div = randomString(8);
</script>

<div id='div()'>This text will be replaced</div>

<script type='text/javascript'>
  jwplayer('div()').setup({
    'flashplayer': 'player.swf',
    'file': 'http://www.youtube.com/watch?v=4AX0bi9GXXY',
    'controlbar': 'bottom',
    'width': '470',
    'height': '320'
  });
</script>

函数随机字符串(长度){
var chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'。拆分(“”);
如果(!长度){
长度=Math.floor(Math.random()*chars.length);
}
var-str='';
对于(变量i=0;i
我非常喜欢这个功能:

function guidGenerator() {
    var S4 = function() {
       return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
    };
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

来自2018年编辑:我认为这个答案有一些有趣的信息,但对于任何实际应用,你都应该使用。

在JavaScript中创建唯一ID的一种简单方法是使用Date对象:

var uniqid = Date.now();
这将给出自1970年1月1日以来经过的总毫秒数,这是每次调用该值时的唯一值

现在该值的问题是不能将其用作元素的ID,因为在HTML中,ID需要以字母字符开头。还有一个问题是,两个用户在完全相同的时间执行一个操作可能会导致相同的ID。我们可以通过在ID的数字部分之前添加一个随机字母来降低这种可能性,并解决字母字符问题

var randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));
var uniqid = randLetter + Date.now();

然而,这仍然有可能发生碰撞,尽管可能性很小。唯一id的最佳选择是保持一个运行计数,每次递增,然后在一个地方(即服务器上)执行所有操作。

首先。为您的分区分配一个id。如下所示:

<div id="uniqueid">This text will be replaced</div>

我建议您从某种占位符开始,您可能已经有了这个占位符,但它可以在某个地方附加div

<div id="placeholder"></div>
可以将其添加到占位符中,如下所示:

document.getElementById('placeholder').appendChild(div);
然后,您可以在jwplayer代码中使用它:

jwplayer(rndId).setup(...);
实例:


旁注:我非常确定id必须以字母字符开头(即,没有数字)-您可能需要更改randomstring的实现以强制执行此规则。()

我想这里的一些人没有真正关注你的问题。看起来你遇到的问题是把随机数放在页面上,然后把播放器连接到页面上。有很多方法可以做到这一点。最简单的方法是对现有代码进行一个小的更改,如document.write()将结果写入页面。我通常不推荐document.write(),但由于您的代码已经内联,并且您尝试的是将div内联,因此这是最简单的方法。在你有随机数的地方,你只需要用它把它和div放到页面中:

var randomId = "x" + randomString(8);
document.write('<div id="' + randomId + '">This text will be replaced</div>');
整个代码块如下所示:

jwplayer(randomId).setup({
<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');

    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }

    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var randomId = "x" + randomString(8);
document.write('<div id="' + randomId + '">This text will be replaced</div>'); 

  jwplayer(randomId).setup({
    'flashplayer': 'player.swf',
    'file': 'http://www.youtube.com/watch?v=4AX0bi9GXXY',
    'controlbar': 'bottom',
    'width': '470',
    'height': '320'
  });
</script>
var generateID = (function() {
    var globalIdCounter = 0;
    return function(baseStr) {
        return(baseStr + globalIdCounter++);
    }
})();
var randomId = generateID("myMovieContainer");  // "myMovieContainer1"
document.write('<div id="' + randomId + '">This text will be replaced</div>');
jwplayer(randomId).setup({
let div_id = randstr('youtube_div_');
然后,在实际应用中,你可以这样做:

jwplayer(randomId).setup({
<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');

    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }

    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var randomId = "x" + randomString(8);
document.write('<div id="' + randomId + '">This text will be replaced</div>'); 

  jwplayer(randomId).setup({
    'flashplayer': 'player.swf',
    'file': 'http://www.youtube.com/watch?v=4AX0bi9GXXY',
    'controlbar': 'bottom',
    'width': '470',
    'height': '320'
  });
</script>
var generateID = (function() {
    var globalIdCounter = 0;
    return function(baseStr) {
        return(baseStr + globalIdCounter++);
    }
})();
var randomId = generateID("myMovieContainer");  // "myMovieContainer1"
document.write('<div id="' + randomId + '">This text will be replaced</div>');
jwplayer(randomId).setup({
let div_id = randstr('youtube_div_');
var randomId=generateID(“myMovieContainer”);//“myMovieContainer1”
文件。书写(“本文本将被替换”);
jwplayer(randomId).设置({

@jfriend000版本的编辑版本:

    /**
     * Generates a random string
     * 
     * @param int length_
     * @return string
     */
    function randomString(length_) {

        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');
        if (typeof length_ !== "number") {
            length_ = Math.floor(Math.random() * chars.length_);
        }
        var str = '';
        for (var i = 0; i < length_; i++) {
            str += chars[Math.floor(Math.random() * chars.length)];
        }
        return str;
    }
/**
*生成一个随机字符串
* 
*@param int length_
*@返回字符串
*/
函数随机化字符串(长度u1){
var chars='0123456789abcdefghijklmnopqrstuvxyzabdfghiklmnopqrstuvxyz'。拆分('';
if(长度类型?=“编号”){
长度=Math.floor(Math.random()*chars.length);
}
var-str='';
对于(变量i=0;i
基于,id应以字母开头:

ID和名称标记必须以字母([a-Za-z])开头,后面可以是任意数量的字母、数字([0-9])、连字符(“-”)、下划线(“)、冒号(:”)和句点(“.”)

因此,解决方案之一可以是(字母数字):

另一种解决方案-仅生成包含字母的字符串:

  var length = 9;
  var id = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, length);

以下是生成随机ID的可重用函数:

function revisedRandId() {
     return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(2, 10);
}

//它不会以任何数字开头,所以CSS3将支持它。我还需要一个随机id,我使用base64编码:

btoa(Math.random()).substring(0,12)
选择所需的字符数,结果通常至少为24个字符。

window.btoa(String.fromCharCode(…window.crypto.getRandomValues(新的Uint8Array(5)))


使用ASCII字母、数字、'.'、'-'和'.'以外的字符可能会导致兼容性问题,因为它们在HTML 4中是不允许的。虽然HTML5中取消了此限制,但为了兼容性,ID应该以字母开头。

我喜欢这个简单的:

function randstr(prefix)
{
    return Math.random().toString(36).replace('0.',prefix || '');
}
由于id应该(尽管不是必须)以字母开头,我会这样使用它:

jwplayer(randomId).setup({
<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function randomString(length) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');

    if (! length) {
        length = Math.floor(Math.random() * chars.length);
    }

    var str = '';
    for (var i = 0; i < length; i++) {
        str += chars[Math.floor(Math.random() * chars.length)];
    }
    return str;
}

var randomId = "x" + randomString(8);
document.write('<div id="' + randomId + '">This text will be replaced</div>'); 

  jwplayer(randomId).setup({
    'flashplayer': 'player.swf',
    'file': 'http://www.youtube.com/watch?v=4AX0bi9GXXY',
    'controlbar': 'bottom',
    'width': '470',
    'height': '320'
  });
</script>
var generateID = (function() {
    var globalIdCounter = 0;
    return function(baseStr) {
        return(baseStr + globalIdCounter++);
    }
})();
var randomId = generateID("myMovieContainer");  // "myMovieContainer1"
document.write('<div id="' + randomId + '">This text will be replaced</div>');
jwplayer(randomId).setup({
let div_id = randstr('youtube_div_');
一些示例值:

youtube_div_4vvbgs01076
youtube_div_1rofi36hslx
youtube_div_i62wtpptnpo
youtube_div_rl4fc05xahs
youtube_div_jb9bu85go7
youtube_div_etmk8u7a3r9
youtube_div_7jrzty7x4ft
youtube_div_f41t3hxrxy
youtube_div_8822fmp5sc8
youtube_div_bv3a3flv425

或者你也可以使用Scripto,因为它已经内置了(除了IE11,我发誓这些家伙已经好几年没有更新了!)

var id=new uint32阵列(10);
window.crypto.getRandomValues(数组);
我还发现:

let length=32;
设id=crypto.randomBytes(长度).toString(“base64”);

有很多方法可以做到这一点,但对于大多数人来说,没有理由重新发明轮子:)

我可以用一种简单直观的方法生成一个随机ID吗

const getRandomID=(长度:数字)=>{
让text='';
可能常数='ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789';
for(设i=0;i
也许这就是他