Подтвердить что ты не робот

Как удалить пустые теги p с помощью jQuery?

Платформа, на которой я создаю сайт, создает пустые теги p в режиме wysiwyg. Как я могу их вынуть?

Что-то вроде этого, возможно...

$("<p> </p>").remove();

Хотя код выше ничего не делает.

4b9b3361

Ответ 1

Ответ зависит от того, что означает "пустой". Если пустые абзацы <p></p>, тогда можно использовать переключатель fireeyedboy p:empty. Если могут быть пробелы или символы новой строки или другие подобные вещи, вам, вероятно, понадобится что-то вроде этого:

$('p').each(function() {
    var $this = $(this);
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0)
        $this.remove();
});

Пример: http://jsfiddle.net/ambiguous/7L4WZ/

FCKEditor (не уверен в CKEditor или TinyMCE) любит добавлять <p>&nbsp;</p> в HTML, поэтому вам может потребоваться вышеупомянутый несколько уродливый подход.

Ответ 2

Try:

$( 'p:empty' ).remove();

Ответ 4

Я немного опаздываю на вечеринку, но недавно нашел эту ветку, так как искал эту проблему.

Я придумал решение Vanilla JS, которое сработало для меня:

var p = document.querySelectorAll('p:empty');
for(var i = p.length - 1; i > -1; i-- ) {
    p[i].parentNode.removeChild(p[i]);
}

В основном это (точно) то, что предложил fireeyedboy, но без jQuery.

Он также работает лучше, чем jQuery: http://jsperf.com/remove-empty-elements-javascript-vs-jquery

Надеюсь, это поможет!

Ответ 5

Спасибо "mu слишком коротко",

Я пробовал свой код. Он работает, но мне нужно обернуть его в jQuery(document).ready(function() {});

Полный код работал у меня:

jQuery(document).ready(function() {
    jQuery('p').each(function() {
        var $this = jQuery(this);
        if($this.html().replace(/\s|&nbsp;/g, '').length == 0) {
            $this.remove();
        }
    });
});

Я не знаю, почему это происходит, мой jQuery/JS не так хорош, я его изучаю;).

Надеюсь, что это поможет другому человеку, как я.

Спасибо.

Ответ 6

/* Remove empty paragraphs with &nbsp; */
jQuery('p').each(function(){
    if( jQuery(this).html() == '&nbsp;' )
        jQuery(this).remove();
})