2012-02-10 9 views
0

のは、私はこのように、コンテンツの編集可能なpreタグとボタンがあるとしましょう:colorifyボタンを押すとコンテンツ編集可能な要素のテキスト領域の色をどのように置き換えますか?

<pre id="input" contenteditable> 
hello world! 
how is everything today? 

I like cherries 
</pre> 
<button id="colorify">Colorify!</button> 

が、私はテキストは文字によって3つの異なる色の間で交互にしたいと思います。

enter image description here

これは私の意図は、ある疑似JavaScriptで表現:

$("#colorify").click(function() { 
    var input = $("#input"), text = input.text(), 
    colors = ["#FF0000", "#00FF00", "#0000FF"]; 
    for (var i = 0; i < text.length; i++) { 
    input.changeColorOfRange(i, 1, colors[i % 3]); 
    } 
}); 

残念ながら、文字インデックス、文字列の長さを受け入れる何changeColorOfRange機能はありませんそれは次のようになります、そしてこれを行うための色。

私はJavascriptでRTFエディタを見てきましたが、いくつかのAPIを調べましたが、テキストの任意の領域の色をプログラマチックに変更するのではなく、選択したテキストの色を変更できるように見えます。

contenteditable要素内の任意のテキスト領域の色をプログラムで変更するにはどうすればよいですか?

+0

私は私があなたに従わないと思う...あなたは投稿できます起こるはずの実際の行動は何かのイメージですか? – elclanrs

+0

@elclanrs編集を参照してください。 –

答えて

0

各文字を色分けするには、各文字をスパンで囲む必要があります。

http://jsfiddle.net/SJqpr/1/

$("#colorify").click(function() { 
    var input = $("#input"), 
     text = input.text(), 
     colors = ["#FF0000", "#00FF00", "#0000FF"]; 

    $('#input').html(''); 
    for (var i = 0; i < text.length; i++) { 
     var $span = $('<span>' + text[i] + '</span>').css('color', colors[i % 3]); 
     $('#input').append($span); 
    } 
}); 
+0

私はこれを言及すべきでしたが、私は同じ解決策を持っていました。バグがあります:新しい行のボックスに、より多くのテキストを入力してください。色分けすると、改行が消えます。 –

+0

私は特定のソリューションと 'contentEditable'要素でうまく動作しようとしていますが、あなたが正しいです、新しい行は変換時に無視されます。それぞれの新しい行が 'div'であるようですが、あなたは各divを色づけして、何とか同じ順序でそれらを再び追加することができると思います。 – elclanrs

+0

@PeterOlson - そうです。これはもっと近いです、http://jsfiddle.net/SJqpr/2/。これは初めてのことですが、それ以降の時間は動作しません。私は別のSOの質問からスパンを使ってすべてのテキストノードをラップするいくつかのコードをつかんだ。 – mrtsherman

0

これは、別のかのうソリューションが、あなたが探しているものかもしれない非常にではありません。それは完全にランダムなので、同じ色の多くの連続した文字があるかもしれません。私はこれを改善することができたと確信している...

HTML:

<p id="input" contentEditable></p><br/> 
<button>Colorify</button> 

JS:

var colorify = function(str) { 

    var chars = str.split(''), 
     colors = ['#ff0000', '#00ff00', '#0000ff'], 
     spans = ''; 

    $.each(chars, function(idx, value){ 
     spans += '<span style="color:' + 
      colors[Math.floor(Math.random() * colors.length)] + 
      '">'+ value +'</span>'; 
    }); 

    $('#input').empty().append(spans); 
}; 

$('button').click(function(){ colorify($('#input').text()); }); 
関連する問題