Jump to content
  • 0

Многострочный текст и тег <br />


viter_alex
 Share

Question

При создании поста в этом блоге многострочный текст в коде программ разбивается на строки тегом <br />, но если мне нужно текст кода скопировать (через свойство textContent соответствующего div'а), то получаю одну строку, т.е. тег <br /> просто удаляется. Как быть?

Можно, конечно, регэкспами определять, где там может быть перевод строки и вставлять, но это просто жуть. Можно ли как-то эти теги <br /> заменить или удалить?

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0
Получить содержимое дива, преобразовать в строку и регекспом заменить <br /> на \r\n

Но ведь содержимое я получу, и получаю уже без тегов

Я в этом не понимаю ниче, но рискну... а что если все параграфами обернуть? Ну, зато будет что потом ворочить. Мин. частица появляется, вполне себе XML даже.

html-разметку я делаю не вручную, а программой. Выглядит это дело так:

<div><div class="codeheader">Преобразование в римскую цифру</div><div class="copylink"><a class="copylink" href="#">Копировать код без номеров строк</a></div><div class="hl"><span class="hl line">    1 </span><span class="hl kwa">Sub</span> СделатьРимскойЦифрой<span class="hl sym">()</span>
<span class="hl line"> 2 </span> <span class="hl kwa">Dim</span> a <span class="hl kwa">As</span> <span class="hl kwb">String</span>
<span class="hl line"> 3 </span> <span class="hl kwa">With</span> Selection
<span class="hl line"> 4 </span> <span class="hl sym">.</span>MoveLeft Unit<span class="hl sym">:=</span>wdWord<span class="hl sym">,</span> Count<span class="hl sym">:=</span><span class="hl num">1</span><span class="hl sym">,</span> Extend<span class="hl sym">:=</span>wdWord
<span class="hl line"> 5 </span> a <span class="hl sym">=</span> <span class="hl kwd">Trim</span><span class="hl sym">(.</span>Text<span class="hl sym">)</span>
<span class="hl line"> 6 </span> <span class="hl sym">.</span>Fields<span class="hl sym">.</span>Add Range<span class="hl sym">:=</span>Selection<span class="hl sym">.</span>Range<span class="hl sym">,</span> <span class="hl kwa">Type</span><span class="hl sym">:=</span>wdFieldEmpty<span class="hl sym">,</span> _
<span class="hl line"> 7 </span> divserveFormatting<span class="hl sym">:=</span><span class="hl kwa">False</span><span class="hl sym">,</span> Text<span class="hl sym">:=</span><span class="hl str">"= "</span> <span class="hl sym">+</span> a <span class="hl sym">+</span> <span class="hl str">" \*ROMAN"</span>
<span class="hl line"> 8 </span> <span class="hl sym">.</span>MoveLeft Unit<span class="hl sym">:=</span>wdWord<span class="hl sym">,</span> Count<span class="hl sym">:=</span><span class="hl num">1</span><span class="hl sym">,</span> Extend<span class="hl sym">:=</span>wdWord
<span class="hl line"> 9 </span> a <span class="hl sym">=</span> <span class="hl kwd">Trim</span><span class="hl sym">(.</span>Text<span class="hl sym">)</span>
<span class="hl line"> 10 </span> <span class="hl sym">.</span>TypeText a <span class="hl sym">&</span> <span class="hl str">" "</span>
<span class="hl line"> 11 </span> <span class="hl kwa">End With</span>
<span class="hl line"> 12 </span><span class="hl kwa">End Sub</span></div>

а вот, что получается после вставки:

<div><div class="codeheader">Преобразование в римскую цифру</div><div class="copylink"><a class="copylink" href="#">Копировать код без номеров строк</a></div><div class="hl"><span class="hl line">    1 </span><span class="hl kwa">Sub</span> СделатьРимскойЦифрой<span class="hl sym">()</span><br /><span class="hl line">    2 </span>    <span class="hl kwa">Dim</span> a <span class="hl kwa">As</span> <span class="hl kwb">String</span><br /><span class="hl line">    3 </span>    <span class="hl kwa">With</span> Selection<br /><span class="hl line">    4 </span>        <span class="hl sym">.</span>MoveLeft Unit<span class="hl sym">:=</span>wdWord<span class="hl sym">,</span> Count<span class="hl sym">:=</span><span class="hl num">1</span><span class="hl sym">,</span> Extend<span class="hl sym">:=</span>wdWord<br /><span class="hl line">    5 </span>        a <span class="hl sym">=</span> <span class="hl kwd">Trim</span><span class="hl sym">(.</span>Text<span class="hl sym">)</span><br /><span class="hl line">    6 </span>        <span class="hl sym">.</span>Fields<span class="hl sym">.</span>Add Range<span class="hl sym">:=</span>Selection<span class="hl sym">.</span>Range<span class="hl sym">,</span> <span class="hl kwa">Type</span><span class="hl sym">:=</span>wdFieldEmpty<span class="hl sym">,</span> _<br /><span class="hl line">    7 </span>            divserveFormatting<span class="hl sym">:=</span><span class="hl kwa">False</span><span class="hl sym">,</span> Text<span class="hl sym">:=</span><span class="hl str">"= "</span> <span class="hl sym">+</span> a <span class="hl sym">+</span> <span class="hl str">" \*ROMAN"</span><br /><span class="hl line">    8 </span>        <span class="hl sym">.</span>MoveLeft Unit<span class="hl sym">:=</span>wdWord<span class="hl sym">,</span> Count<span class="hl sym">:=</span><span class="hl num">1</span><span class="hl sym">,</span> Extend<span class="hl sym">:=</span>wdWord<br /><span class="hl line">    9 </span>        a <span class="hl sym">=</span> <span class="hl kwd">Trim</span><span class="hl sym">(.</span>Text<span class="hl sym">)</span><br /><span class="hl line">   10 </span>        <span class="hl sym">.</span>TypeText a <span class="hl sym">&</span> <span class="hl str">" "</span><br /><span class="hl line">   11 </span>    <span class="hl kwa">End With</span><br /><span class="hl line">   12 </span><span class="hl kwa">End Sub</span><br /></div></div>

получаю я содержимое div класса "hl"

Link to comment
Share on other sites

  • 0

Собственно я проблему уже решил.

Но поясню. Вот div:

<div><div class="copylink"><a class="copylink" href="#">Копировать код без номеров строк</a></div><div class="hl">
/*здесь размещается текст кода, отформатированный спанами*/</div>
</div>

Когда мышь проходит над ссылкой класса copylink, то ссылка связывается с флешем, который занимается копированием текста в буфер. При этом текст div'a я достаю такой конструкцией:

this.parentNode.nextSibling.textContent

и передаю этот текст флешу. Но гугловский движок, переводы строк делает тегом <br />, вследствие чего, textContent представляет собой одну строку.

Решил же я это дело так. Беру из div'a innerHTML, удаляю из него все спаны, заменяю <br /> на \r\n, удаляю номера строк из текста кода и уже этот готовы код отдаю флешу. Работает!

function getFreebrCodeString(innerHTMLtocopy){
//удаляем теги <span></span>
var htmlfree=innerHTMLtocopy.replace(/(<span[^>]*>)(.*?)(<\/span>)/ig, "$2");
//заменяем <br> на \r\n
var brfree=htmlfree.replace(/(.*?)(?:<br(?: \/)?>)(.*?)/ig, "$1\r\n$2");
//удаляем номера строк
return brfree.replace(/^\s*\d{1,}\s/img, "");
}

Link to comment
Share on other sites

  • 0
nl2br нигде не используется при вставке?

Нет, не используется. Я даже не знаю, что это такое, хотя, судя по названию, заменяет разрывы строк на <br />. Может гугль использует, когда постит запись блога?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy