текст на jQuery() и символ новой строки

Я хочу быть в состоянии сказать

$(someElem).text('this\n has\n newlines);

и он делает с новой строки в браузере. Единственный способ решения проблемы я нашел-это установить свойство CSS 'белый-пространство' до 'до' на someElem. Это почти работает, но затем я раздражающе большие отступы между текстом и верхней части someElem, даже когда я установить отступ в 0. Есть ли способ избавиться от этого?

Комментарии к вопросу (2)

Это's в 2015 году. Правильный ответ на этот вопрос на данный момент заключается в использовании белого пространства Усс: предварительная он-лайн " или " бело-пространстве: предварительно обертывание. Чистый и элегантный. В низкой версии IE, который поддерживает пара 8.

https://css-tricks.com/almanac/properties/w/whitespace/

П. С. В <с>, который до CSS3, которые стали обычными</с> вы'д, вероятно, придется вручную обрезать начальные и/или конечные пробелы.

Комментарии (13)

Если вы храните объект jQuery в переменной, вы можете сделать это:

в

var obj = $("#example").text('this\n has\n newlines');
obj.html(obj.html().replace(/\n/g,'<br/>'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="example"></p>

в

Если вы предпочитаете, вы также можете создать функцию, чтобы сделать это с помощью простого вызова, просто как jQuery.текст() делает:

в

$.fn.multiline = function(text){
    this.text(text);
    this.html(this.html().replace(/\n/g,'<br/>'));
    return this;
}

// Now you can do this:
$("#example").multiline('this\n has\n newlines');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="example"></p>

в

Комментарии (2)

Вот что я использую:

function htmlForTextWithEmbeddedNewlines(text) {
    var htmls = [];
    var lines = text.split(/\n/);
    // The temporary <div/> is to perform HTML entity encoding reliably.
    //
    // document.createElement() is *much* faster than jQuery('<div></div>')
    // http://stackoverflow.com/questions/268490/
    //
    // You don't need jQuery but then you need to struggle with browser
    // differences in innerText/textContent yourself
    var tmpDiv = jQuery(document.createElement('div'));
    for (var i = 0 ; i < lines.length ; i++) {
        htmls.push(tmpDiv.text(lines[i]).html());
    }
    return htmls.join("<br>");
}
jQuery('#div').html(htmlForTextWithEmbeddedNewlines("hello\nworld"));
Комментарии (5)

Кроме того, попробуйте использовать .HTML-код и затем *обруч* с в<теги предварительной>`:

$(someElem).html('this\n has\n newlines').wrap('<pre />');
Комментарии (1)

Вы можете использовать [HTML-код][1] вместо текст и заменить все вхождения с <БР>. Вы должны правильно защитить свой текст.


x = x.replace(/&/g, '&')
     .replace(/>/g, '>')
     .replace(/
Комментарии (5)

Я бы посоветовал работать с элемента someElem непосредственно, в качестве замены с .HTML-код() будет заменять другие HTML-теги в строке, а также.

Вот моя функция:

function nl2br(el) {
  var lines = $(el).text().split(/\n/);
  $(el).empty();
  for (var i = 0 ; i < lines.length ; i++) {
    if (i > 0) $(el).append('<br>');
    $(el).append(document.createTextNode(lines[i]));
  }
  return el;
}

Назвать его:

someElem = nl2br(someElem);
Комментарии (1)

Используя CSS бело-космического имущества-пожалуй, лучшее решение. Использовать Firebug или инструменты разработчика в Chrome, чтобы определить источник дополнительных накладок вы видели.

Комментарии (0)

Попробуйте это:

$(someElem).html('this<br> has<br> newlines);
Комментарии (0)