2010-07-24 82 views
0

我正在嘗試製作所見即所得的編輯器,至此我可以選擇文本並單擊「製作粗體」使所選文本變爲粗體。它實際上只是圍繞選定的文本包裝< b>(沒有空格)標籤。但我的問題是,如果我要取消大膽的是,我的劇本有一些麻煩......檢測文本是否爲粗體

到目前爲止,這裏是我的腳本:

<script language="javascript"> 
function format(tag) //defines function format 
{ 
    var editor = document.getElementById('editor'); 
    var txt = ''; 
    var tester = document.getElementById('tester'); 
    if (window.getSelection) //if your browser uses this method of text selection 
    { 
     txt = window.getSelection(); 
      } 
    else if (document.getSelection) //if your browser uses this method of text selection 
    { 
     txt = document.getSelection(); 
      } 
    else if (document.selection) //if your browser uses this method of text selection 
    { 
     txt = document.selection.createRange().text; 
      } 
    else return; //Return this 
    matched = editor.innerHTML.match(txt); //Find the selected text in the editor 
//  if (matched.style.font-weight = "600") {tester.innerHTML = "already bold";} //if the selected text is bold, say 'already bold' DOES NOT WORK 
//  else {tester.innerHTML = "not bold";} //if it doesn't... 
    editor.innerHTML = editor.innerHTML.replace(matched,"<"+tag+">"+matched+"</"+tag+">");//Wrap <b> tags around it 
} 
</script> 
<input type="button" value="Make Bold" onmousedown="format('b')"> 
<input type="button" value="Make Italic" onmousedown="format('i')"> 
<div id='editor' onclick="javascript:this.designMode='on';" designmode="on" contenteditable="true">Edit Box</div> 

<span id="tester">testing span</span> 

如果你嘗試一下,你可以輸入該文本框並選擇文本,然後單擊Make Bold(粗體),它將變爲粗體。現在再次點擊Make Bold,但沒有任何反應。它只是在選定的文本週圍添加另一個< b>標籤。我想讓它變得不大膽;正常。

我如何做到這一點?

謝謝:)

+1

每個許可證下有100萬個所見即所得的編輯器可供您指定。除非你純粹作爲學習練習,否則我建議不要重蹈覆轍。 – mikerobi 2010-07-24 22:39:26

回答

3

與HTML作爲字符串梅辛是一個壞主意。有兩個更好的選擇:第一個是獲取包含當前用戶選擇的元素,並使用DOM方法和屬性(如parentNode)來測試它是否爲粗體。這對跨瀏覽器來說很棘手。更容易的是使用documentexecCommand方法,該方法將自動切換加粗。它在所有主流瀏覽器的最新版本中都受到支持。

document.execCommand("bold", false, null); 

UPDATE

注意,在火狐(也可能是其他瀏覽器),這沒有任何影響,除非該文件具有designMode接通。這是一個完整的例子。突出顯示一些文本並按下Ctrl-B:

<html> 
<head> 
    <title>Test</title> 
    <script type="text/javascript"> 
     window.onload = function() { 
      document.designMode = "on"; 
     }; 

     function keyDown(evt) { 
      if (evt.keyCode == 66 && evt.ctrlKey) { 
       document.execCommand("bold", false, ""); 
      } 
      return false; 
     } 
    </script> 
</head> 
<body onkeydown="return keyDown(event);"> 
    <div>I like tea <b>with milk</b></div> 
</body> 
</html> 
+0

謝謝:)!我聽說過這個命令,但沒有任何網站有我理解的解釋。沒有例子。 你能給我舉一個這個工作的例子嗎?我試着把它放到一個函數中,但是當我調用函數時沒有任何事情發生:( – Scott 2010-07-24 20:29:49

+0

非常感謝你! – Scott 2010-07-24 23:59:07