2010-06-28 4 views
4

Si j'ai un texte comme celui-ci;jQuery Remplacer la 1ère instance de texte

<p>&nbsp;</p> 
<p>this is the real text</p> 
<p>&nbsp;</p> 
<p>more</p> 

Ce que je besoin est un morceau de jQuery qui remplacera la première instance seulement <p>&nbsp;</p> avec « ».

Donc le résultat après l'appel devrait être;

<p>this is the real text</p> 
<p>&nbsp;</p> 
<p>more</p> 

Mais si la première ligne n'est pas <p>&nbsp;</p> l'appel ne devrait rien faire.

EDIT

J'ai essayé d'implémenter la solution de @Joey C, mais je ne peux pas le faire fonctionner. La suppression n'a tout simplement pas.

var myHtml = "<p>abc</p><p>next para</p>"; 
var newElement = $(myHtml); 

if ($(newElement).first("p").text() == "abc") { 
    $(newElement).first("p").remove(); 
} 

alert($(myHtml).text()); 

Répondre

8

Ce qui suit trouve la première instance d'un élément p et supprime du DOM si elle est html est égal à « &nbsp; » comme spécifié.

if ($("p:first").html() == "&nbsp;") 
    $("p:first").remove(); 

Si le code HTML est stocké sous forme de chaîne dans une variable, myHTML, vous pouvez créer un élément DOM et effectuer une comparaison similaire. Lors des essais, j'ai découvert que cela fonctionne mieux si vous envelopper les éléments que vous créez avec un div:

var myHtml = "<p>abc</p><p>next para</p>"; 
    var newElement = $("<div>" + myHtml + "</div>"); 

    if (newElement).find("p:first").text() == "abc") { 
    newElement.find("p:first").remove(); 
    } 

    alert(newElement.html()); 

Cela mettra à jour pas vraiment la chaîne contenant le code HTML d'origine, vous devez donc réattribuer aussi bien si vous toujours besoin dans cette variable.

myHTML = newElement.html(); 
+0

Que se passe-t-il si le code HTML est dans une variable appelée say myHTML? – griegs

+0

le html à vérifier dans l'élément p? simplement comparer à la variable à la place: if ($ ("p: first"). Html() == myHTML) –

+0

Non désolé, et si le html im chercher dans, ne cherche pas, est à l'intérieur d'une variable? – griegs

1

Je amour jQuery (et la programmation fonctionnelle en général), mais parfois JavaScript natif est le chemin à parcourir:

function ProcessParagraphs(elem) 
{ 
    var children = elem.getElementsByTagName('p'); 

    if(children.length < 1) 
     return; 

    var p = children[0]; 

    if($(p).text().replace(/^\s+|\s+$/g,"").length != 0) //remove *all* whitespace and see if anything is left. 
    return; 
    else 
     elem.removeChild(p); 

} 

Si vous avez la liste des éléments à traiter alors je leur donner une classe, dites 'foo', et traitez-les avec jQuery

$('.foo').each(ProcessParagraphs); 
+0

'getElementsByTagName()' n'a pas de capital initial. – alex

+0

également, vous déclarez «children» comme une variable, puis redeclare lorsque vous le comparez. – alex

+0

@alex Oups, merci. –