如果只发生在段落中的文本之前,如何删除第一个br标签?

时间:2014-01-29 11:31:03

标签: jquery html css

我的段落包含文字和<br>标签。我想删除第一个<br>标记,如果它出现在任何段落中的文本之前。

像这样:

<p>
  <br>
  Lorem Ipsum is dummy text.
</p>

我想这样:

<p>
  Lorem Ipsum is dummy text.
</p>

4 个答案:

答案 0 :(得分:3)

您可以检查第一个childNode是否为<br>并删除/隐藏如下:

$('p').each(function() {
    var first = this.childNodes[0];
    while((!first.tagName && $.trim(first.textContent) == '') || (first.tagName && first.tagName.toLowerCase() == 'br')) {
        this.removeChild(first);
        first = (this.childNodes && this.childNodes.length > 0) ? this.childNodes[0] : null;
    }
});

演示: http://jsfiddle.net/makZ7/1/

更新了演示(同时删除了所有前导空文本节点): http://jsfiddle.net/WQ9f3/5/

输入:

<p><br/>Hello<br/>World</p>
<p><br/>Hello<br/>World<br/>Hey!</p>

输出:

<p>Hello<br/>World</p>
<p>Hello<br/>World<br/>Hey!</p>

答案 1 :(得分:1)

尝试类似

的内容
$("p br:first-child").filter(function () {
    var prev = this.previousSibling;
    return prev == null || $.trim(prev.nodeValue) == ''
}).remove();

演示:Fiddle

答案 2 :(得分:0)

也可以使用正则表达式删除<br/>标记。

<强> JsFiddle

$(document).ready(function () {
    var exp = /^\s*?(<br(\/>|>))/gi;
    $('p').each(function (idx, elm) {
        elm = $(elm);
        elm.html(elm.html().replace(exp, ''));
    });
});

代码检查每个p标记的内部html,忽略任何空格,用空字符串替换文本开头的<br><br/>标记。

答案 3 :(得分:-1)

试试这段代码:

<强> DEMO

$("p br:first-child").remove();