【问题标题】:Rails: Keep simple_format from adding line breaks to lists?Rails:防止 simple_format 在列表中添加换行符?
【发布时间】:2011-06-23 17:27:19
【问题描述】:

这是输入的 HTML:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

如果我通过 Rails 的simple_format 传递它,输出是:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>

<p><ul>
<br />  <li>Item 1</li>
<br />  <li>Item 2</li>
<br />  <li>Item 3</li>
</ul></p>

<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

注意每个列表项之前的&lt;br /&gt;

我怎样才能让simple_format 不这样做?

最终我想要做的是在尚未包含在某种标签中的内容周围添加段落标签(即,blockquote、ul、ol)。

【问题讨论】:

    标签: ruby-on-rails text format helper


    【解决方案1】:

    我遇到了同样的问题。以下是解决方法!

    将 simple_format 输出包装在一个 div 中,如下所示:

    <div class="single-spacing">
      <%= simple_format @your_content %>          
    </div>
    

    然后将其添加到您的 CSS 文件中:

    .single-spacing {
      ul br {
        display: none;
      }
    }
    

    或者,当你真的想在列表中添加一些 br 时,你可以添加这个 CSS:

    .single-spacing{
      ul li br:first-child, ol li br:first-child {
        display: none;
      }
    }
    

    我试图将它作为一个类添加到 simple_format 本身(这是一个选项),但由于某种原因它不起作用。将其放入 DIV 即可。

    不知道为什么 simple_format 会将这些额外的
    添加到一个简单的列表中,但是嘿嘿。

    迈克尔

    【讨论】:

    • 你让我免于编写一些丑陋的 JavaScript 函数,谢谢!
    【解决方案2】:

    据我所知,simple_format 旨在解决换行符“\n”(按回车键时创建)

    simple_format 为 \n 创建一个 &lt;br /&gt; 并为 \n\n 创建一个 &lt;p&gt;

    simple_format 并不是真正设计用于处理现有的 html 输入,而是更多地用于来自数据库和文本字符串等的 text_area 字段。

    有关示例,请参见 rails 文档:ActionView - simple_format

    一些建议可能只是使用 content_tag 包装您的整个输入:

        <%= content_tag :p, :class => "strong" do -%>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
    
          <ul>
           <li>Item 1</li>
           <li>Item 2</li>
           <li>Item 3</li>
         </ul>
    
         Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        <% end -%>
    

    或者如果可能的话,格式化你的html没有换行符:

      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
    
      <ul> <li>Item 1 </li> <li>Item 2</li> <li>Item 3</li> </ul>
    
      Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    

    这些都非常hackish,最好的解决方案是在调用显示之前将所有输入存储为html。但不知道您是如何获得输入的,很难提出一种方法来做到这一点。

    【讨论】:

    • 是的,主要是在需要它的行中添加&lt;p&gt; 标签,但在这种情况下,我可以很好地控制任何输入数据。
    【解决方案3】:

    您可以尝试禁用 sanitize 参数

    simple_format html_input, {}, sanitize: false}
    

    它会起作用,但你应该记住没有消毒

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2011-10-17
      • 2014-08-10
      • 2010-11-25
      相关资源
      最近更新 更多