questions - javascript programs




div आईडी के लिए यादृच्छिक स्ट्रिंग उत्पन्न करते हैं (6)

मैं अपनी वेबसाइट पर YouTube वीडियो प्रदर्शित करना चाहता हूं, लेकिन मुझे उपयोगकर्ताओं द्वारा साझा किए जाने वाले प्रत्येक वीडियो के लिए एक अद्वितीय id जोड़ने में सक्षम होने की आवश्यकता है। इसलिए मैंने इसे एक साथ रखा, और मैं थोड़ी समस्या में चला गया। मैं 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>

@ 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;
    }

प्रथम। अपने div को एक आईडी असाइन करें। ऐशे ही:

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

उसके बाद, कोड के बाद अपने <script> टैग के अंदर जोड़ें:

Document.getElementById("uniqueid").id = randomString(8);

मुझे लगता है कि यहां कुछ लोगों ने वास्तव में आपके विशेष प्रश्न पर ध्यान केंद्रित नहीं किया है। ऐसा लगता है कि आपको जो समस्या है वह पृष्ठ में यादृच्छिक संख्या डालने और खिलाड़ी को हुक करने में है। ऐसा करने के कई तरीके हैं। सरलतम आपके मौजूदा कोड में इस तरह के दस्तावेज़ में एक छोटे से बदलाव के साथ है। पृष्ठ में परिणाम () लिखें। मैं आम तौर पर document.write () की सिफारिश नहीं करूंगा, लेकिन चूंकि आपका कोड पहले से ही इनलाइन है और आप जो पहले से कोशिश कर रहे थे, वह डिव इनलाइन डालने का था, ऐसा करने का यह सबसे सरल तरीका है। उस बिंदु पर जहां आपके पास रैंडम नंबर है, आप इसे पेज में डालने के लिए इसका उपयोग करते हैं और पृष्ठ में 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 = '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>

इसे करने का दूसरा तरीका

मैं अंत में यहाँ जोड़ सकता हूँ कि एक अद्वितीय डिव आईडी बनाने के लिए सही मायने में रैंडम नंबर उत्पन्न करना ओवरकिल है। आपको एक यादृच्छिक संख्या की आवश्यकता नहीं है। आपको बस एक आईडी की आवश्यकता है जो अन्यथा पृष्ठ में मौजूद नहीं होगी। YUI जैसे फ्रेमवर्क का एक ऐसा फंक्शन है और वे जो भी करते हैं, एक ग्लोबल वैरिएबल होता है जो कि हर बार फंक्शन कहलाता है और फिर यूनीक बेस स्ट्रिंग के साथ कंबाइन हो जाता है। यह कुछ इस तरह दिख सकता है:

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({

मेरा सुझाव है कि आप किसी प्रकार के प्लेसहोल्डर से शुरू करते हैं, आपके पास यह पहले से ही हो सकता है, लेकिन यह कहीं न कहीं डिव को जोड़ने के लिए है।

<div id="placeholder"></div>

अब, विचार गतिशील रूप से एक नई div बनाने के लिए है, अपनी यादृच्छिक आईडी के साथ:

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/

सिडेनोट: Im सुंदर यकीन आईडी की शुरुआत एक अल्फा चरित्र (यानी, कोई संख्या नहीं) के साथ होनी चाहिए - आप इस नियम को लागू करने के लिए randomstring के अपने कार्यान्वयन को बदलना चाह सकते हैं। ( ref )


यहाँ यादृच्छिक आईडी उत्पन्न करने के लिए पुन: प्रयोज्य कार्य है:

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

// यह किसी भी संख्या अंक के साथ शुरू नहीं होगा इसलिए इसे CSS3 द्वारा समर्थित किया जाएगा


HTML 4 के आधार पर, आईडी को पत्र से शुरू होना चाहिए:

आईडी और NAME टोकन को एक अक्षर ([A-Za-z]) से शुरू होना चाहिए और किसी भी संख्या में अक्षरों, अंकों ([0-9]), हाइफ़न ("-"), अंडरस्कोर ("_") का पालन करना चाहिए। , कॉलन (":"), और अवधियों ("।")।

तो, समाधान में से एक (अल्फ़ान्यूमेरिक) हो सकता है:

  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);

एक अन्य समाधान - केवल अक्षरों के साथ स्ट्रिंग उत्पन्न करें:

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





javascript