在可疑的div中加入特定文本

Sla*_*lay 6 javascript jquery

我在这个令人满意的div中有这个.每当我键入#something,然后键入space,我想在该div中立即加粗该单词.

例如

这是我的信息.#大声笑.我想加粗标签.

以下是我的代码

<div id="message" name="message" contenteditable="true"></div>

$('#message').keyup(function(e){

  var len = $(this).val().length;
  if ($(this).val().substring(length - 1, 1) == '#') {

  }

  //detect space
  if(e.keyCode == 32){

  }
});
Run Code Online (Sandbox Code Playgroud)

我正在使用jquery.我该怎么做呢?

jhe*_*rax 2

使用contenteditable = "true"可能很棘手,但这是一个可能的解决方案:

当单词前面带有#时,文本将显示为粗体

  • 示例:你好#world,这是一个#sample

HTML:

<div id="divEditable" contenteditable="true"></div>
Run Code Online (Sandbox Code Playgroud)

JavaScript:jsbin.com/zisote

我们将拆分代码,但实际上它被包装在IIFE中

/*** Cached private variables ***/
var _break = /<br\s?\/?>$/g,
    _rxword = /(#[\w]+)$/gm,
    _rxboldDown = /<\/b>$/gm,
    _rxboldUp = /<\/b>(?!<br\s?\/?>)([\w]+)(?:<br\s?\/?>)?$/,
    _rxline = /(<br\s?\/?>)+(?!<b>)(<\/b>$)+/g;
Run Code Online (Sandbox Code Playgroud)
/*** Cached private variables ***/
var _break = /<br\s?\/?>$/g,
    _rxword = /(#[\w]+)$/gm,
    _rxboldDown = /<\/b>$/gm,
    _rxboldUp = /<\/b>(?!<br\s?\/?>)([\w]+)(?:<br\s?\/?>)?$/,
    _rxline = /(<br\s?\/?>)+(?!<b>)(<\/b>$)+/g;
Run Code Online (Sandbox Code Playgroud)
/*** Handles the event when a key is pressed ***/
$(document).on("keydown.editable", '.divEditable', function (e) {
  //fixes firefox NodeContent which ends with <br>
  var html = this.innerHTML.replace(_break, ""),
      key = (e.which || e.keyCode),
      dom = $(this);

  //space key was pressed
  if (key == 32 || key == 13) {
    //finds the # followed by a word
    if (_rxword.test(dom.text()))
      dom.data("_newText", html.replace(_rxword, "<b>$1</b>&nbsp;"));
    //finds the end of bold text
    if (_rxboldDown.test(html))
      dom.data("_newText", html + "&nbsp;");
  }
  //prevents the bold NodeContent to be cached
  dom.attr("contenteditable", false).attr("contenteditable", true);
});
Run Code Online (Sandbox Code Playgroud)
/*** Handles the event when the key is released ***/
$(document).on("keyup.editable", '.divEditable', function (e) {
  var dom = $(this),
      newText = dom.data("_newText"),
      innerHtml = this.innerHTML,
      html;

  //resets the NodeContent
  if (!dom.text().length || innerHtml == '<br>') {
    dom.empty();
    return false;
  }

  //fixes firefox issue when text must follow with bold
  if (!newText && _rxboldUp.test(innerHtml))
    newText = innerHtml.replace(_rxboldUp, "$1</b>");

  //fixes firefox issue when space key is rendered as <br>
  if (!newText && _rxline.test(innerHtml)) html = innerHtml;
  else if (newText && _rxline.test(newText)) html = newText;

  if (html) newText = html.replace(_rxline, "$2$1");

  if (newText && newText.length) {
    dom.html(newText).removeData("_newText");
    placeCaretAtEnd(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

您可以在这里使用实时代码:jsbin.com/zisote

  • 你好,我发现这段代码有一个小错误。输入消息“#lol haha​​”,然后全部退格,然后再次输入一些文本,它变成粗体..知道哪里出了问题吗? (2认同)