phpjavascriptjqueryphpjs

nl2br() equivalent in javascript


Possible Duplicate:
jQuery convert line breaks to br (nl2br equivalent)

Currently I add <BR> for each evt.which == 13. Is there a nl2br() for JavaScript, so I can do away with this evt.which == 13?

How different is this from 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());
    }
});

Solution

  • Take a look at nl2br on php.js which seems exactly what you're looking for. Basically, it's:

    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');
    }
    

    EDIT:
    your example using nl2br() may be changed like this:

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

    (note that this updates #TextArea1 on every keypress and doesn't change the value of #TextArea wich is what I think you're looking for, but I might be misunderstanding)

    EDIT2:
    If you want to get the behaviour of your old function (with inserting <br/>s to #TextArea) do this:

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