Javascript 检测文本是否为粗体

Javascript 检测文本是否为粗体,javascript,editor,wysiwyg,Javascript,Editor,Wysiwyg,我正在尝试制作一个WYSIWYG编辑器,到目前为止,我已经有了它,因此您可以选择文本并单击“加粗”将所选文本加粗。它实际上只是将(无空格)标记环绕在所选文本周围。但我的问题是,如果我想取消粗体,我的脚本有一些麻烦 到目前为止,我的脚本如下: <script language="javascript"> function format(tag) //defines function format { var editor = document.getElementById('e

我正在尝试制作一个WYSIWYG编辑器,到目前为止,我已经有了它,因此您可以选择文本并单击“加粗”将所选文本加粗。它实际上只是将(无空格)标记环绕在所选文本周围。但我的问题是,如果我想取消粗体,我的脚本有一些麻烦

到目前为止,我的脚本如下:

<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>

函数格式(标记)//定义函数格式
{
var editor=document.getElementById('editor');
var-txt='';
var tester=document.getElementById('tester');
if(window.getSelection)//如果浏览器使用此文本选择方法
{
txt=window.getSelection();
}
else if(document.getSelection)//如果浏览器使用此文本选择方法
{
txt=document.getSelection();
}
else if(document.selection)//如果浏览器使用此文本选择方法
{
txt=document.selection.createRange().text;
}
else return;//返回这个
matched=editor.innerHTML.match(txt);//在编辑器中查找所选文本
//如果(matched.style.font-weight=“600”){tester.innerHTML=“已加粗”}//如果所选文本为加粗文本,则表示“已加粗”无效
//否则{tester.innerHTML=“not bold”}//如果它不。。。
editor.innerHTML=editor.innerHTML.replace(matched,“+matched+”);//将标记环绕它
}
编辑框
测试跨度
如果您尝试使用它,您可以在该框中键入并选择文本,然后单击“加粗”,它将变为加粗。现在再次单击“加粗”,但什么也没发生。它只是在所选文本周围添加另一个标记。我想让它变得不大胆;正常

我该怎么做


谢谢:)

将HTML作为字符串处理是个坏主意。有两个更好的选择:第一个是获取包含当前用户选择的元素,并使用DOM方法和属性(如
parentNode
)测试它是否为粗体。这在跨浏览器时很棘手。使用
document
execCommand
方法更容易,它将自动切换粗体。所有主要浏览器的最新版本都支持它

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

请注意,在Firefox(可能还有其他浏览器)中,除非文档打开了
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>

试验
window.onload=函数(){
document.designMode=“on”;
};
功能键控(evt){
if(evt.keyCode==66&&evt.ctrlKey){
document.execCommand(“粗体”,false,”);
}
返回false;
}
我喜欢加牛奶的茶

将HTML作为字符串处理是个坏主意。有两个更好的选择:第一个是获取包含当前用户选择的元素,并使用DOM方法和属性(如
parentNode
)测试它是否为粗体。这在跨浏览器时很棘手。使用
document
execCommand
方法更容易,它将自动切换粗体。所有主要浏览器的最新版本都支持它

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

请注意,在Firefox(可能还有其他浏览器)中,除非文档打开了
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>

试验
window.onload=函数(){
document.designMode=“on”;
};
功能键控(evt){
if(evt.keyCode==66&&evt.ctrlKey){
document.execCommand(“粗体”,false,”);
}
返回false;
}
我喜欢加牛奶的茶

谢谢:)!我听说过这个命令,但是没有一个网站有我能理解的解释。没有例子。你能给我举个这样的例子吗?我试着把它放到一个函数中,但调用函数时什么也没发生:(谢谢!)!我听说过这个命令,但是没有一个网站有我能理解的解释。没有例子。你能给我举个这样的例子吗?我尝试将其放入一个函数中,但在调用该函数时什么也没有发生:(您可以命名的每个许可证下都有一百万个WYSIWYG编辑器可用。除非您这样做纯粹是为了学习,否则我建议不要重新发明轮子。您可以命名的每个许可证下都有一百万个WYSIWYG编辑器可用。除非您这样做纯粹是为了学习,否则我建议不要重新发明轮子轮子。