2011-08-18 1 views
1

Alors, voici mon problème. J'ai un petit service tiers sur mon site qui génère un tas de HTML à partir d'un flux RSS et le colle dans ma page Web lorsque la page est chargée. Cependant, lorsqu'il génère le code HTML, il insère un tas de marques de rupture totalement inutiles. Malheureusement, le fichier source qui génère ce code est sur le serveur de la tierce partie et non le mien, donc je ne peux pas le modifier.Remplacer un ensemble d'éléments html br par un autre dans jQuery - analyser HTML avec jQuery

Ainsi, j'essaye d'ajuster le HTML juste avant que la page soit chargée en employant un petit jQuery dans la propriété onLoad = "" dans l'étiquette de corps. Cependant, je ne peux pas simplement utiliser quelque chose comme $ ('br'). Remove(); car alors il n'y a pas de balises de rupture, et j'en ai besoin d'un pour chaque endroit où il y en a trois.

En fin de compte, ce que je dois faire est de trouver une déclaration jQuery qui remplace

<br><br clear=all><br> 

avec

<br /> 

Je suis assez nouveau à jQuery, mais je ne semblais pas trouver tout ce qui pourrait m'aider à le faire. Des idées?

Merci d'avance pour toute aide!

Répondre

3

Utilisez le Next Adjacent Selector (+):

$("br+br").remove(); //Removes all <br> tags in front of another 

jsFiddle demo

+0

Ce fut de loin la solution la plus simple (qui a travaillé). Merci beaucoup pour la suggestion et la démo! – ihake

+0

+1 la démo de jsFiddle – JohnJohnGa

-1

Vous feriez mieux de le faire avec des regexps pas avec jquery. Simplest exemple:

string.replace('<br><br clear=all><br>', '<br />') 
+0

horrible Parse HTML avec regex, utilisez un analyseur pour cette – JohnJohnGa

1

Si l'on suppose qu'ils sont dans le format exact que vous avez donné, vous pouvez le faire:

var br = $('br[clear="all"]'); 
br.attr('clear', ''); 
br.prev('br').remove(); 
br.next('br').remove(); 
0

Vous pouvez jouer avec des attributs de sélection, pas à l'intérieur du onload, mais à l'intérieur du jquery prêt (http : //api.jquery.com/ready/)

$ ('br [clear = all]'). remove();

plus de détails sur l'attribut de sélection: http: //api.jquery.com/attribute-equals-selector/

0

Pourquoi donn`t il suffit de remplacer le code HTML du conteneur RSS HTML:

yourContainerElem.innerHTML = yourContainerElem.innerHTML.replace(/<br><br clear=all><br>/gi, '<br />'); 
0

pour supprimer tous sauf un:

$('br,[clear!="all"]').remove() 

ensuite pour enlever le 'clear = all':

$('br').removeAttribute('clear') 
Questions connexes