2013-03-15 67 views
4

我想將段落中某些隨機字符的顏色更改爲單擊按鈕上的紅色。請找到我的代碼。我在這有一些錯誤。所有的更改段落中隨機字母的顏色

$('input').click(function(){ 

    var para = $('#para'); 
    var position = Math.floor(Math.random()*100); 
    var character = []; 

    var i=0 
    while (i <= 30) 
    { 
     character[i] = para.html().substr(position*(i+1), 1); 
     i++; 
    } 

    $.each(character, function() { 
    character.css('color','red'); 
    }); 

}); 

首先我創建了將包含從段落 接着我用each()遍歷每個所述陣列中的元件的應用的CSS屬性30個隨機字母陣列。 但在控制檯窗口彈出一個錯誤,說對象沒有方法'css'

我在做什麼錯?

+0

你可以只爲jQuery對象調用css方法。你的情況,你的數組元素只是字符串。 – HungryCoder 2013-03-15 12:09:04

+0

我確實......但是這也沒有幫助 – 2013-03-15 12:09:27

+3

那麼,你的'$ .each'邏輯沒有意義。 'character'是一個數組,你不能在其上使用jQuery方法。您需要爲所有角色創建元素,更改顏色並將它們附加到頁面上。 – undefined 2013-03-15 12:10:11

回答

3

首先,CSS方法只適用於jQuery對象。你有字符數組中的字符串。 css方法不適用於字符串。其次,你的每種方法寫錯了。它應該是這樣的

$.each(character, function(index, value) { 
    // Do something 
}); 

對於您的問題聲明,以改變一些隨機字符顏色在你的字符串。這是Fiddle。嘗試一下。

這裏是代碼:

$('input').click(function(){ 

var para = $('#para'); 
var charArray = $('span', para); 

// case: No span (Initial String) 
if (charArray.length === 0) { 
    var html = para.html(); 
    var newArr = []; 
    var len = html.length; 
    for (var i=0; i<len; i++) { 
     newArr.push('<span>' + html[i] + '</span>'); 
    } 
    html = newArr.join(''); 
    para.html(html); 
    charArray = $('span', para); 
} 

// Reset all spans 
$.each(charArray, function(i, value) { 
    value.style.color = ''; 
}); 

var paralen = charArray.length; 

for (var i=0; i<30; i++) { 
    var pos = Math.floor(Math.random()*100); 
    pos = pos % paralen; 
    charArray[pos].style.color = 'red'; 
} 

}); 
+0

謝謝@blunderboy! :D – 2013-03-15 12:36:53

+0

@anubhav你會意識到,覆蓋html內容與清空元素並追加新字符一樣... – nbrooks 2013-03-15 12:43:35

+0

是的,我確實。但在你的回答中,除了變化的人物之外,其他人物都消失了。所有字符都應該保留 – 2013-03-15 12:46:12

2

您需要查看的文檔$.each。一個可能的解決方案:

$('input').click(function() { 

    var $para = $('#para'); 
    var position = Math.floor(Math.random()*100); 
    var character = []; 

    for (var i=0; i <= 30; i++) { 
     character[i] = $("<span>" + $para.text().substr(position*(i+1), 1) 
            + "</span>"); 
     character[i].css('color', 'red'); 
    } 

    $para.empty(); 

    $.each(character, function(idx, val) { 
     $(val).appendTo($para); 
    }); 
}); 
+0

這就是我想要的。但不是清空para div,而是添加新的字母,我需要它動態地改變para本身的顏色。 – 2013-03-15 12:25:31

+0

你不能在角色上調用jQuery方法。它必須在jQuery對象上。必須圍繞HTML元素。 ''元素是內聯的,所以他們應該做你想要的東西。你運行這個時有什麼問題? – nbrooks 2013-03-15 12:27:58

+0

沒有問題。但最終的目標是保留para($ para.empty()已過時),只要改變目標字母的顏色即可。您正在清空該段,然後附加它,這不是必需的 – 2013-03-15 12:32:45