【问题标题】:Adding tags to selection为选择添加标签
【发布时间】:2012-05-21 11:28:31
【问题描述】:

我正在使用此 Javascript 对所选文本进行以下更改:

    function formatText(el,tag){
var selectedText = document.selection?document.selection.createRange().text:el.value.substring(el.selectionStart,el.selectionEnd);// IE:Moz
if (selectedText == "")
{return false}
var newText='"#28'+tag+'"'+selectedText+'"#28'+tag+'"';
if(document.selection){    //IE
document.selection.createRange().text=newText;
}
else{   //Moz
el.value=el.value.substring(0,el.selectionStart)+newText+el.value.substring(el.selectionEnd,el.value.length);
}
}

但是,我希望新标签仅在另一个文本区域中可见,而不是在我实际进行选择的区域中可见。在这种情况下,我有 2 个文本区域,一个称为“message_text”,另一个称为“message”……我将在“message_text”中输入和选择文本,但对选择所做的任何更改只能反映在“消息”中文本区域。

目前我已经尝试过这个:

<button type="button" value="D" onclick="formatText(message,'D')" class="blue">D</button>

但这只有在我在“消息”文本区域中选择了 anytnin 时才有效。

谢谢

【问题讨论】:

  • 如果您在 jsfiddle.net 上创建了一个最小的代码示例会有所帮助

标签: php javascript forms


【解决方案1】:

你必须扩展 javascript 代码:

function formatText(el_from, el_to, tag) {
    var selectedText = document.selection ? document.selection.createRange().text : el_from.value.substring(el_from.selectionStart, el_from.selectionEnd);// IE:Moz

    if (selectedText == "") {
        return false;
    }

    var start_index = el_to.value.indexOf(selectedText);
    var sel_t_len = selectedText.length;
    var copy_selText = el_to.substring(start_index, sel_t_len);

    var newText='"#28'+tag+'"'+copy_selText+'"#28'+tag+'"';

    el_to.value = el_to.value.substring(0, start_index) + newText + el_to.value.substring(sel_t_len, el_to.value.length);
}

那么你可以这样称呼它:

<button type="button" value="D" onclick="formatText(document.getElementById('message_text'), document.getElementById('message'),'D')" class="blue">D</button>

PS:我不确定document.getElementById - 自从使用 jQuery 以来已经多年没有使用它了...您也应该转换为 jQuery... 您不需要为 IE 或 FF 解决 JS 或Chrome 等 - jQuery 自行处理...

编辑:好的,我做了一些自定义,它应该适合您的需求...

【讨论】:

  • 谢谢 shadyyx,这很好用,不过只是一个问题,任何新的选择都会覆盖以前的选择,所以如果我的第一个选择更改为:this is "#28B"BOLD TEXT"#28B" 然后我单击另一个选择更改"#28F"this is"#28F" BOLD TEXT 时它应该是"#28F"this is"#28F" "#28B"BOLD TEXT"#28B" .. 有什么想法可以释放最后的结果吗?
  • 目前这将不起作用,除非您将更改保留在您选择文本的文本区域内...由于总是将一些字符添加到第二个文本区域中,因此子字符串功能(尤其是开始和结束索引) 将不适合第一个 textarea 中的文本...您为什么不想更改第一个 textarea 中的文本?
  • @user1395580 我已经编辑了代码,现在试试看(也许在sel_t_len 所在的任何地方都需要稍作修改,也许应该有sel_t_len+1
  • @user1395580 如果有帮助并解决了您的问题,请接受答案。谢谢!
  • 感谢 shadyyx,不幸的是,编辑没有做任何事情。但你让我走上了正确的道路,我真的很感激。 PD:很抱歉您的回答迟到了。
猜你喜欢
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
相关资源
最近更新 更多