2011-06-09 51 views
1

这就是HTML代码的样子。我需要去掉br标签并包装段落标签中的行(即带有日期的行)。每个日期应该包装在自己的段落标签中。如何剥离<br>标签和包装线<p>和</p>标签?

<html> 
<head><script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 


<h2>Other Events</h2>      
<p> 
<strong>Venue name</strong> 
</p> 
<div class="details"> 
<p> 
Wednesday, May 11, 2011 <br> 
Wednesday, June 08, 2011 <br> 
Wednesday, July 13, 2011 <br> 
Wednesday, August 10, 2011 <br> 
Wednesday, September 14, 2011 <br> 
Wednesday, October 12, 2011 <br> 
Wednesday, November 09, 2011 <br> 
19.00 
<br> 
</p> 
</div> 

</body> 
</html> 

我试过的jQuery的代码块,我在谷歌搜索后发现,但它只是不工作:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$('body').html($('body').html().replace(/<br>\*/g,"</p><p>")); 
}); 

我也试过这个代码块,但不是用段落标记包裹日期,它在每行末尾放置空段落标记:

$(document).ready(function(){ 
$('.details p br').replaceWith('<p></p>'); 
}); 

这就是HTML输出的样子。正如你可以看到它没有正确包装带p标签的日期线:

<div class="details"> 
<p> 
Wednesday, May 11, 2011 <p></p> 
Wednesday, June 08, 2011 <p></p> 
Wednesday, July 13, 2011 <p></p> 
Wednesday, August 10, 2011 <p></p> 
Wednesday, September 14, 2011 <p></p> 
Wednesday, October 12, 2011 <p></p> 
Wednesday, November 09, 2011 <p></p> 
19.00 
<p></p> 
</p> 
</div> 

有没有人知道解决这个问题的方法?

+0

我会写一个自定义的解析器解析巫行由行,然后无论它的需要追加有效的标签...:d – metaforce 2011-06-09 09:49:15

回答

3

编辑:通过以这种方式使用<p>标记您的runining它的整个目的相反,你应该尝试删除<br>标签,并把里面的文字<p>元素,这将有同样的效果,但会语义正确。

编辑2:我想你想以上述方式,只是三倍读你的问题,我想我陷了!

var $p = $('.details p'); 
$p.contents() 
    .filter(function() { return this.nodeType == 3; }) // Select all textnodes 
    .wrap('<p>') // Place them inside paragraph elements 

$('br', $p).remove(); // Remove all break elements 

工作小提琴:http://jsfiddle.net/garreh/UWDw5/1/

+0

谢谢你,这个完美的作品。我想这样设置格式的原因是因为我需要为第二个和次要日期行添加jQuery切换功能,以便在页面加载时默认隐藏它们,然后用户可以单击链接来显示其他日期。我知道我只能将切换附加到段落元素而不是br标签。我已经将切换代码整理出来了。再次感谢你的帮助。 – Victoria 2011-06-09 10:35:12