2011-12-13 81 views
0

在我继续我的问题之前,我想在这里提到我搜索了这个网站,看看问题是否已经发布。我看到一些类似的问题,但没有一个解决我的需要。所以我在这里问。在js中换行文本

我有一个div文字与我的文本包含在span标签中的每个字符:

Text = A quick brown fox jumps 

<div id="span_text"> 
<span>A</span><span>&nbsp;</span><span>q</span><span>u</span><span>i</span><span>c</span><span>k</span><span>&nbsp;</span><span>b</span><span>r</span><span>o</span><span>n</span><span>&nbsp;</span><span>f</span><span>o</span><span>x</span><span>&nbsp;</span><span>j</span><span>u</span><span>m</span><span>p</span><span>s</span> 
</div> 

的问题是,由于每个字符被封闭在span标记的话不环绕。有没有什么办法可以像在MS Word和其他编辑器中一样封装文本,同时在字符中包含字符???

为什么我需要将每个字符放在范围内? 其实我正在做一个基本的打字导师。无论何时按下某个键,我必须:(1)高亮显示灰色字符(如果输入有效字符)。 (2)突出显示字符红色如果输入了错误的字符。 (3)突出显示的下一个字符输入是绿色

所以定位的每个字符,我必须将它们封闭在跨度,并给每个跨度唯一的ID通过jQuery以选择它们。希望这可以解释原因。

感谢

+0

他们会不会感到寂寞全由自己? – 2011-12-13 20:05:05

+0

你在做什么,要求每个字母在一个跨度?可能有更好的解决方法。 – 2011-12-13 20:06:59

回答

0

他们走出格的,如果他们不需要在那里?

把任何你想包裹在div里面?

2

<span>&nbsp;</span>确实需要吗?

如果你可以避免在一个范围内包装这1个字符,它应该包裹得很好。我无法想象为什么你需要设计一个非破坏性的空间,或者用javascript来访问它。如果你这样做,为什么?

其他字符在跨度内是好的,但我认为你可以将&nbsp;移出,而不是将它包裹在一个跨度中。

0

试试这个:

(function() { 
    var a = document.getElementById("span_text"); 
    a.innerHTML = a.innerHTML.replace(/<\/span><span>/g, "\n").replace(/<\/?span>/g, ""); 
    a.style.whiteSpace = "pre"; 
    a.style.width = "1.5em"; 
    a.style.overflow = "scroll"; 
}()); 
0

审查意见后,我终于做到了没有“跨越”标签包围的每个字符。我做了两个跨度。一个用于键入字符和其他当前字符。在每个关键事件中,我通过用更新的HTML替换当前的HTML来更新div内容。下面是我使用的基本逻辑:

var Text = "The quick brown fox jumps over the lazy dog. It was dark and quiet in the room."; 
var ChTyped = 0; // Number of characters typed so far 

function update(){ 
    var StringTyped = Text.substr(0, ChTyped); 
    var StringCurrent = '<span class="l-active">' + Text.substr(ChTyped, 1) + '</span>'; 
    var StringRemaining = Text.substr(ChTyped+1); 
} 

$("#typingbox").on('keyup', function(e){ 
    ChTyped++; 
    update(); 
}); 

谢谢大家......

1
function GetWrapedText(text, maxlength) {  
    var resultText = [""]; 
    var len = text.length;  
    if (maxlength >= len) { 
     return text; 
    } 
    else { 
     var totalStrCount = parseInt(len/maxlength); 
     if (len % maxlength != 0) { 
      totalStrCount++ 
     } 

     for (var i = 0; i < totalStrCount; i++) { 
      if (i == totalStrCount - 1) { 
       resultText.push(text); 
      } 
      else { 
       var strPiece = text.substring(0, maxlength - 1); 
       resultText.push(strPiece); 
       resultText.push("<br>"); 
       text = text.substring(maxlength - 1, text.length); 
      } 
     } 
    } 
    return resultText.join(""); 
}