为div id生成随机string
我想在我的网站上展示YouTubevideo,但是我需要为每个用户将要分享的video添加一个唯一的id
。 所以我把它放在一起,我遇到了一个小问题。 我试图让JavaScript为div id
添加一个随机string,但它不工作,显示string:
<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>
我真的很喜欢这个function:
function guidGenerator() { var S4 = function() { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); }; return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); }
从JavaScript中创buildGUID / UUID?
不知道你的问题是什么,但在JavaScript中创build一个唯一的ID的方法更简单的方法是使用Date对象:
var uniqid = Date.now();
这会给你自1970年1月1日以来的总毫秒数,这是每次你打电话时的一个独特的价值。
现在这个值的问题是你不能把它用作元素的ID,因为在HTML中,ID需要以字母字符开头。 还有两个用户在同一时间执行操作可能导致相同的ID的问题。 我们可以通过在ID的数字部分前附加一个随机字母来减less这种可能性,并修复我们的字母字符问题。
var randLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26)); var uniqid = randLetter + Date.now();
尽pipe如此,这仍然有一个机会,不pipe是渺茫的。 唯一的ID最好的办法是保持运行计数,每次增加计数,并在一个地方,即在服务器上进行。
以下是生成随机ID的function方法:
function randId() { return Math.random().toString(36).substr(2, 10); }
我想这里的一些人没有真正关注你的问题。 看起来你的问题是把随机数字放在页面上,然后把播放器挂上去。 有很多方法可以做到这一点。 最简单的方法是对现有的代码进行一些小小的修改,将document.write()结果写入页面。 我通常不会推荐document.write(),但是因为你的代码已经内联了,你试图做的事情就是把div放在内联,这是最简单的方法。 在你有随机数的地方,你只需要用它把div和div放到页面中:
var randomId = "x" + randomString(8); document.write('<div id="' + randomId + '">This text will be replaced</div>');
然后,你在jwplayer中提到这样设置代码:
jwplayer(randomId).setup({
而整个代码块将如下所示:
<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 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>
另一种方法来做到这一点
我可能会在最后添加这样的内容,那就是创build一个真正的随机数字来创build一个唯一的div ID是有点矫枉过正的。 你不需要一个随机数字。 你只需要一个不会在页面中存在的ID。 像YUI这样的框架有这样一个function,他们所做的全部variables是每次调用该函数时递增的全局variables,然后将其与唯一的基本string结合起来。 它可以看起来像这样:
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({
基于HTML 4 ,ID应该从字母开始:
ID和NAME标记必须以字母([A-Za-z])开头,后面跟着任意数量的字母,数字([0-9]),连字符(“ – ”),下划线(“_”) ,冒号(“:”)和句点(“。”)。
所以,其中一个解决scheme可能是(字母数字):
var length = 9; var prefix = 'my-awesome-prefix-'; // To be 100% sure id starts with letter // Convert it to base 36 (numbers + letters), and grab the first 9 characters // after the decimal. var id = prefix + Math.random().toString(36).substr(2, length);
另一个解决scheme – 只用字母生成string:
var length = 9; var id = Math.random().toString(36).replace(/[^az]+/g, '').substr(0, length);
@ jfriend000版本的修改版本:
/** * Generates a random string * * @param int length_ * @return string */ function randomString(length_) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.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; }
我还需要一个随机的ID,我使用base64编码:
btoa(Math.random()).substring(0,12)
select你想要的字符,结果通常至less有24个字符。
我build议你从某种占位符开始,你可能已经有了这个,但是它可以添加div。
<div id="placeholder"></div>
现在,这个想法是dynamic地创build一个新的DIV,你的随机ID:
var rndId = randomString(8); var div = document.createElement('div'); div.id = rndId div.innerHTML = "Whatever you want the content of your div to be";
这可以被占用你的占位符,如下所示:
document.getElementById('placeholder').appendChild(div);
然后你可以在你的jwplayer代码中使用它:
jwplayer(rndId).setup(...);
现场示例: http : //jsfiddle.net/pNYZp/
旁注:林相当肯定ID必须以字母字符(即没有数字)开始 – 您可能需要更改您的randomstring的实施来执行此规则。 ( ref )
第一。 给你的div分配一个id。 喜欢这个:
<div id="uniqueid">This text will be replaced</div>
之后,在你的<script>
标签里添加以下代码:
Document.getElementById("uniqueid").id = randomString(8);