2011-09-29 4 views
0

J'ai un client qui utilise un éditeur WYSIWYG pour créer de nouvelles pages de site Web. Le problème est que parfois l'éditeur WYSIWYG mis en balises vides pJQuery - améliorer ma fonction

<p>&nbsp;</p> 

cela a causé des ravages dans la mise en page j'ai donc écrit une petite fonction pour supprimer ces balises vides

$('p') 
.filter(function() { 
    return $.trim($(this).text()) === '' 
}) 
.remove() 

Le problème est maintenant que Lorsqu'une image est insérée dans l'éditeur wysiwyg, elle est incluse dans la balise AP et ma fonction la supprime de l'écran.

Est-ce que ma fonction peut être mise à jour pour autoriser les images ou est-ce que je peux juste rechercher et enlever les balises p vides ???

Merci à l'avance

James

Répondre

2

Vous pouvez faire votre filtre également veiller à ce qu'il n'y a pas d'éléments de l'enfant:

$('p').filter(function() { 
    var $this = $(this); 
    return !$this.children().length && $.trim($this.text()) === ''; 
}).remove() 
0

Vous pouvez essayer d'utiliser des balises div autour des blocs que vous souhaitez supprimer tels que. Dans votre instruction jQuery, vous pouvez ensuite appeler en fonction de l'ID div à la place de tous les paragraphes.

2

Vous pouvez utiliser le pseudo-sélecteur :empty seulement sélectionner des éléments qui ne disposent pas d'enfants:

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

Cependant, si vous avez p éléments avec l'espace blanc et rien d'autre, ils ne seront pas supprimés (parce que :empty traite les nœuds de texte comme des enfants). Vous pouvez donc supprimer les espaces blancs (en utilisant .trim) de vos éléments p avant d'exécuter ce qui précède.

Le problème avec votre méthode actuelle est que les balises comme img ne contiennent pas de texte, de sorte que votre fonction filter pense un élément p contenant seulement un élément img doit être retiré.

1
$('p').not(':has("img")') 
.filter(function() { 
    return $.trim($(this).text()) === '' 
}) 
.remove() 

JS Fiddle demo.

1

Il suffit de fixer WYSIWYG, si elle est javascript , sinon, alors corriger au backend pas frontend.

+0

C'est probablement le meilleur plan d'action en fait. C'est un bug tuez-le à la source au lieu de le contourner. –

Questions connexes