我想在JS中选择带有正则表达式的<br />
段内<p></p>
的所有出现。目前我只选择所有<br />
:
var regex = /<br\s*[\/]?>/gi;
但是这样做会让我在某些方面遇到麻烦,因为我正在尝试选择。我需要一个更精确的正则表达式,因为标题等中断与我无关。
如果你想知道这个的上下文,我想用适当的类替换<br />
两个段落,就像<br />
一样,但是在中断之后缩进文本就像这样:
function removeEmptyNodes(selector)
{
$(selector).each(function() {
if ($(this).html().replace(/\s| /g, '').length == 0)
$(this).remove();
});
};
function assignIndents()
{
var str = $("#content").html();
var regex = /<br\s*[\/]?>/gi;
$("#content").html(str.replace(regex, "</p><br /><p>"));
$('br').prev('p').addClass('br');
$('br').next('p').addClass('indent');
removeEmptyNodes('#content p');
$('br').next('.scroller').children('p').first().addClass('indent');
$('br').replaceWith('');
removeEmptyNodes('#content p');
};
修改:
我的目标是我有一个包含一个或多个换行符的段落。就像这个简单的案例:<p>with some text <br />and another line<p>
。我希望换行后的文本缩进并且是自己的p。所以我需要拆分原来的p。我不想在原始段落中添加div或其他嵌套的东西。我最后需要一堆兄弟p标签:<p class="br">with some text</p><p class="indent">and another line<p>
通过哪种方式我替换<br />
以分割p对我来说无关紧要......
答案 0 :(得分:5)
为什么不在没有正则表达式的情况下找到所有内容?
$('p').each(function(){
var brs = $('br', this); //all <br>s withing this <p>
//do something with brs
});
小提琴:http://jsfiddle.net/maniator/Ra8ax/
更新:
以下是您对新规范的要求:
$('p').each(function(){
var html = this.innerHTML;
var htmlArray = html.split('<br>');
var new_html = htmlArray[0];
for(var i = 1; i < htmlArray.length; i++){
new_html += "<div class='break'>"+htmlArray[i]+"</div>";
}
this.innerHTML = new_html;
});
小提琴:http://jsfiddle.net/maniator/Ra8ax/8/
没有嵌套的更新:
JS:
$('p').each(function(){
var html = this.innerHTML;
var htmlArray = html.split('<br>');
var new_html = "<p>"+htmlArray[0]+"</p>";
for(var i = 1; i < htmlArray.length; i++){
new_html += "<p class='break'>"+htmlArray[i]+"</p>";
}
$(this).replaceWith(new_html);
});
答案 1 :(得分:3)
使用Jquery选择器而不是正则表达式:$('p br')
<小时/> 更新2:
$('#content')
.contents()
.filter(function() {
return this.nodeType == Node.TEXT_NODE;
})
.wrap("<p>");
var br = $('#content br');
br.prev('p').addClass('br');
br.next('p').addClass('indent');
br.remove();