【问题标题】:nl2br() equivalent in javascript [duplicate]javascript中的nl2br()等价物[重复]
【发布时间】:2011-11-20 00:53:12
【问题描述】:

可能重复:
jQuery convert line breaks to br (nl2br equivalent)

目前我为每个evt.which == 13 添加<BR>。 JavaScript 是否有 nl2br(),所以我可以取消这个 evt.which == 13

这与 php.js 有何不同

$('#TextArea').keypress(function(evt) {

    if (evt.which == 13) {

        var range           = $('#TextArea').getSelection();
        var image_selection = range.text;

        $('#TextArea').replaceSelection('<BR>');
        $('#TextArea1').html($('#TextArea').val());
    }
});

【问题讨论】:

  • 空白:前行;
  • white-spac:pre-line;仅有助于渲染。如果您稍后将相同的值导出到 rtf,它会被丢弃。
  • 这个问题可能会产生误导,因为它混合了两个不同的问题:nl2brevt.which == 13。真的keypressevt.which == 13(这是Enter Key 的事件代码)与将新行转换为HTML 的&lt;br&gt; 标记无关。

标签: php javascript jquery phpjs


【解决方案1】:

看看nl2br on php.js,这似乎正是您要找的。基本上是:

function nl2br (str, is_xhtml) {
    if (typeof str === 'undefined' || str === null) {
        return '';
    }
    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

编辑:
您使用nl2br() 的示例可能会更改如下:

$('#TextArea').keypress(function(evt){
        $('#TextArea1').html(nl2br($('#TextArea').val()));
    });

(请注意,这会在每次按键时更新 #TextArea1,并且不会更改 #TextArea 的值,这正是我认为您正在寻找的,但我可能会误解)

EDIT2:
如果您想获得旧函数的行为(将&lt;br/&gt;s 插入#TextArea),请执行以下操作:

$('#TextArea').keypress(function(evt){
        $('#TextArea').html(nl2br($('#TextArea').val())); // replace linebreaks first
        $('#TextArea1').html($('#TextArea').val()); // copy to #TextArea1
    });

【讨论】:

  • 它在 keypress/keup/keydown 上有效吗?
  • 取决于您如何使用它 - 如果您显示更多代码可能会很有用,因此我可以提示如何集成它。
  • 我通过 keypress/keup/keydown 执行此操作,它认为这就是它的作用,现在我可以将其作为 nlb2r() 回显吗?
  • 你能在一分钟内回顾一下这个问题,用按键更新它
  • 已经完成了,看看我的编辑,我将如何更改您的代码。
【解决方案2】:

这是 php.js 中的一个函数nl2br

function nl2br (str, is_xhtml) {
  // http://kevin.vanzonneveld.net
  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   improved by: Philip Peterson
  // +   improved by: Onno Marsman
  // +   improved by: Atli Þór
  // +   bugfixed by: Onno Marsman
  // +      input by: Brett Zamir (http://brett-zamir.me)
  // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // +   improved by: Brett Zamir (http://brett-zamir.me)
  // +   improved by: Maximusya
  // *     example 1: nl2br('Kevin\nvan\nZonneveld');
  // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
  // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
  // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
  // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
  // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
  var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display

  return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

【讨论】:

  • 它在 keypress/keup/keydown 上有效吗?
  • 与keyperss无关。您可以在按键事件回调函数中使用它。
  • 你能在一分钟内回顾一下这个问题,用按键更新它
  • +1 太棒了,谢谢!
猜你喜欢
  • 2017-06-19
  • 1970-01-01
  • 2011-09-12
  • 2014-02-15
  • 2012-05-19
  • 2020-02-14
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多