2013-03-10 113 views
3

我有这个代码巫婆工作正常,将第一个变成星号,但是如果我想要像1-5这样的数字变成与星号(*)相同数量的星号(*),我可以在同一个星号循环还是我需要创建5个不同的循环,每个数字一个?将数字更改为星号?

function changeNumber() 
{ 
    var elements= document.getElementsByClassName("grade"); 
    for (var i=0; i<elements.length; i++) { 
     var element = elements[i]; 
     var text = element.innerHTML; 
     var x = text.replace('1','*'); 
     element.innerHTML=x; 
    } 

} 

此代码获取用户输入的值,并将其置于一个数组中......

var button = $('#add'); 
    button.click(function() 
    { 
     //funktion för vad som ska hända när man klickar på knappen 
     var filmnamn = $('#name'); 
     var filmnamnet = filmnamn.val(); 
     var betyg = $('#star'); 
     var betyget = betyg.val(); 
     betyget = Number(betyget); 

     if(filmnamnet == 0) 
     { 
      $('#name').css('background-color', 'red'); 

     } 
     if(betyget == 0) 
     { 
      $('#star').css('background-color', 'red'); 

     } 
     if(betyget == 0 || filmnamnet == 0) 
     { 
      alert("Vänligen fyll i fälten korrekt"); 

     } 
     else 
     { 
      var array = new Array(); 
      array.unshift(betyget); 
      array.unshift(filmnamnet); 
      film_array.unshift(array); 
      betyg_array.unshift(array); 
      updateFilmList(); 

     } 

    }); 

然后函数updateFilmlist看起来像这样...

var film_list = $("#filmlista"); 
    var film_array = new Array();   

function updateFilmList() 
    { 
      document.getElementById("name").value = ''; 
      document.getElementById("star").value = 0; 
      var filmen = film_array[0][0]; 
      var grade = film_array[0][1]; 
      var element = '<li class="lista">' + filmen + '<span class="betyg">'+ grade +'</span></li>'; 
      film_list.append(element); 
      changeNumber(); 

    } 

而且当我在changeNumber函数中添加了代码时,只有那些变成星号的数字才是动态创建的列表中的第一个列表元素......然后剩下的就显示为数字,为什么?顺便说一句,你可以忽略betyg_array因为它的其他功能和无关的问题...

+0

所以你的意思是,如果文字是2更换**和3替代* **等? – Popnoodles 2013-03-10 13:36:57

+0

是这就是我的意思 – spovell 2013-03-10 14:42:32

回答

3

Working demo

你并不需要为每个或循环的条件。

function changeNumber(){ 
    var elements= document.getElementsByClassName("grade"); 
    for (var i=0; i<elements.length; i++) { 
     var element = elements[i]; 
     var length = parseInt(element.innerHTML); 
     var x=Array(length+1).join("*"); 
     element.innerHTML=x; 
    } 
} 
+1

这是很好http://jsfiddle.net/NqCNf/3/ – dfsq 2013-03-10 13:59:20

+0

这似乎只适用于第一个跨度元素,然后其他人只是显示为数字...我做的脚本工程因为当我按下一个按钮时,会创建一个具有span元素的列表元素,然后另一个函数将假设将该数字更改为x星的数量...... – spovell 2013-03-10 16:03:51

+0

在小提琴中起作用。显示你的代码。 – Popnoodles 2013-03-11 12:56:50

2

Array(5).join("*")会给你一串4颗星。我相信你可以从那里弄清楚。

3

为你oneliner:

var str = '8 rabbits, that\'s 16 rabbit ears'; 
str = str.replace(/(\d+)/g,function(a){return Array(+a+1).join('*')}); 
//=> ******** rabbits, that's **************** rabbit ears 

[解释]

/(\d+)/g提取物套从串连续的数字(\d)(例如 '1', '15')。

回调函数返回具有n个元素=所找到的组变换为号码数字(+-operator,这里+a+a+1+1(加1),因为具有n个空元素“字符串”的阵列的连接返回与一个字符串的接合阵列长度n-1。

[奖金]你可以这样

String.prototype.replaceNumbersWithStr = function(str){ 
    str = str || '*'; // default to '*'; 
    return this.replace(/(\d+)/g,function(a){return Array(+a+1).join(str)}); 
} 
// usage examples 
'8 rabbits, that\'s 16 rabbit ears'.replaceNumbersWithStr(); 
//=> ******** rabbits, that's **************** rabbit ears 

'8 rabbits, that\'s 16 rabbit ears' 
    .replaceNumbersWithStr('<span class="star"></span>'); 
//=> <span class="star"></span><span class="star"> ... 

,有点更复杂的延长String

String.prototype.Num2Str = function(str){ 
    str = str || '*'; // default to '*'; 
    return this.replace(/\{(\d+)\}/g,function(a,b){return Array(+b+1).join(str)}); 
} 
// usage example 
'{2} rabbits, that\'s 4 rabbit ears'.Num2Str(); 
//=> ** rabbits, that's 4 rabbit ears 

'Stars: {2}'.Num2Str('<span class="star"></span>'); 
//=> Stars: <span class="star"></span><span class="star"> 
+0

真棒 - +1能够超越9!你能解释提取你匹配的数字的数值的语法吗? – Floris 2013-03-10 13:57:26

+0

嗨弗洛里斯,看到编辑答案 – KooiInc 2013-03-10 14:19:09

+0

如果我可以再次+1,我会! – Floris 2013-03-10 16:05:25