Javascript 单击粗体或斜体标记时,光标是否位于中间?

Javascript 单击粗体或斜体标记时,光标是否位于中间?,javascript,html,css,Javascript,Html,Css,我正在我的一个torrent网站中使用此代码。 单击“B”标记时,下一个代码显示[B][/B]。但是,当这样做时,光标的位置在这些标签的开始处而不是在中间,像这样:[B]这里的光标[/B] 代码如下: <script type="text/javascript"> function BBTag(tag, s, text, form) { switch (tag) { case '[url]': var start = document

我正在我的一个torrent网站中使用此代码。 单击“B”标记时,下一个代码显示[B][/B]。但是,当这样做时,光标的位置在这些标签的开始处而不是在中间,像这样:[B]这里的光标[/B]

代码如下:

<script type="text/javascript">
function BBTag(tag, s, text, form) {
    switch (tag) {
        case '[url]':
            var start = document.forms[form].elements[text].selectionStart;
            var end = document.forms[form].elements[text].selectionEnd;
            if (start != end) {
                var body = document.forms[form].elements[text].value;
                var left = body.substr(body, start);
                var middle = "[url]" + body.substring(start, end) + "[/url]";
                var right = body.substr(end, body.length);
                document.forms[form].elements[text].value = left + middle + right;
            } else {
                document.forms[form].elements[text].value = document.forms[form].elements[text].value + "[url][/url]";
            }
            document.forms[form].elements[text].focus();
    }

函数BBTag(标签、s、文本、表单){
开关(标签){
案例“[url]”:
var start=document.forms[form].elements[text].selectionStart;
var end=document.forms[form].elements[text].selectionEnd;
如果(开始!=结束){
var body=document.forms[form].elements[text].value;
var left=body.substr(body,start);
var middle=“[url]”+body.substring(开始、结束)+“[/url]”;
var right=body.substr(end,body.length);
document.forms[form].elements[text].value=left+middle+right;
}否则{
document.forms[form]。elements[text]。value=document.forms[form]。elements[text]。value+“[url][/url]”;
}
document.forms[form].elements[text].focus();
}

这是插入这些标记的代码:

<td align="center">
    <input type="button" name="url" value="URL " onclick="javascript: BBTag('[url]', 'url', '<?php echo $name; ?>', '<?php echo $form; ?>')" />
</td>


您忘了用花括号关闭函数:

<script type="text/javascript">
    function BBTag(tag, s, text, form) {
        switch (tag) {
            case '[url]':
                var start = document.forms[form].elements[text].selectionStart;
                var end = document.forms[form].elements[text].selectionEnd;
                if (start != end) {
                    var body = document.forms[form].elements[text].value;
                    var left = body.substr(body, start);
                    var middle = "[url]" + body.substring(start, end) + "[/url]";
                    var right = body.substr(end, body.length);
                    document.forms[form].elements[text].value = left + middle + right;
                } else {
                    document.forms[form].elements[text].value = document.forms[form].elements[text].value + "[url][/url]";
                }
                document.forms[form].elements[text].focus();
        }
    // You miss a function closing curly bracket here
</script>

函数BBTag(标签、s、文本、表单){
开关(标签){
案例“[url]”:
var start=document.forms[form].elements[text].selectionStart;
var end=document.forms[form].elements[text].selectionEnd;
如果(开始!=结束){
var body=document.forms[form].elements[text].value;
var left=body.substr(body,start);
var middle=“[url]”+body.substring(开始、结束)+“[/url]”;
var right=body.substr(end,body.length);
document.forms[form].elements[text].value=left+middle+right;
}否则{
document.forms[form]。elements[text]。value=document.forms[form]。elements[text]。value+“[url][/url]”;
}
document.forms[form].elements[text].focus();
}
//你错过了一个函数,在这里用花括号括起来

我建议您使用清晰的缩进代码。因此,下次您将发现此类错误。

您希望从中使用setCaretPosition()

而不是使用

document.forms[form].elements[text].focus();
从“document.forms[form].elements[text].value length”中减去“last closed tag length”,即可得到光标的确切位置

//编辑

工作小提琴

正如我所说,您必须从textarea长度中减去结束标记长度:

var pos = document.forms[form].elements[text].value.length - (tag.length + 1); // Closing tag has + 1 char because of the slash 
setCaretPosition(document.forms[form].elements[text], pos);

基本上是重复的,这里的答案肯定回答了这个问题。不,这不是我想要的问题,当单击B标记时,我的光标应该在标记[B]之间这里[/B]。这不发生。不,不起作用请查看此链接,如果可能,请提供具体代码。。。