如何确保冗余的<p>标签不会破坏样式?</p>

时间:2011-06-11 22:34:27

标签: jquery css tumblr

我从Tumblr API获得了不可靠的结果。当我得到一行文字时,我只收到文字。当有多行时,每行都包含在<p>标记中。所以我得到:

This is a value with no second line

<p>This is a value</p>
<p>with a second line</p>

我希望两者看起来都一样。我一直在手动添加值<p>,但这会导致:

<p><p>This is a value</p>
<p>with a second line</p></p>

关于多行值。

我对如何解决这个问题有一些想法,但我不确定哪个是最好的。

  1. 创建新的CSS样式p p {},以抵消搞乱的样式
  2. 使用jQuery获取冗余<p>标记的DOM内容并使其成为非冗余
  3. 只需将文本加载到jQuery函数中,查看是否有<p>个标签,如果没有,则添加它们,然后将结果写入DOM。
  4. 我不确定选项1是否能很好地工作(尤其是跨浏览器),而且看起来有点hacky。关于选项2或3是否更好以及我将如何实施的任何想法?

    编辑:应该提到我正在使用Tumblr主题,因此我无法使用Python / PHP / ASP /等(这会让我更容易!)。

5 个答案:

答案 0 :(得分:4)

为什么不

if ( str.indexOf('<p>') === -1 ) {
   str = '<p>' + str + '</p>';    
}

因此,如果字符串中没有出现"<p>"字符串,则表示结果为“单行”,您需要将其包装在"<p>"标记中。

答案 1 :(得分:2)

首先匹配:

result = /^\s*\<p\>.+\<\/p\>$/.test(result) ? result : '<p>' + result + '</p>';

而不是一直只添加标签。

答案 2 :(得分:1)

在您的选择中,我认为选项3是最佳选择。但是,我有另一个可能有用的想法:

我不确定你正在开发什么平台(php / asp.net / etc ..),你也可以在前端做到这一点。

  1. 收到消息(一行或多行)
  2. 使用您的平台split函数将字符串拆分为基于搜索换行符的数组
  3. 迭代数组值,如果有任何
  4. ,则删除所有<p>
  5. 再次迭代并在每个数组索引前加上<p> </p>
  6. 将每个数组字符串截断为一个字符串,然后输出到dom
  7. 中提琴!无论是1行还是10行,没有<p>或10 <p>,您都可以依赖这些功能。

    这种方法可以“适应未来”这个应用程序的一部分,因为,正如我们所看到的那样,偶尔公司会快速并且没有警告改变api的返回结果,或者改变api的工作方式

答案 3 :(得分:0)

假设PHP;如果字符串格式一致〜

$str = 'hello world';
//$str = '<p>a string with a p tag</p>';

if(substr($str,0,3)=='<p>') {

    echo $str;

} else {

    echo '<p> ' . $str . '</p>';

}

// <p>hello world</p>
// <p>a string with a p tag</p>

答案 4 :(得分:0)

另一种解决方案可能是将所有/<\/p>[^<]*<p>/g替换为<br/>,以保留多行段落中的换行符。